У меня есть DetailsView, который выглядит почти идеально. Единственное, есть одно поле, которое фактически получает информацию из другой таблицы. Это поле идентификатора, которое связано с другой таблицей в базе данных, и я надеялся, что есть какой-то способ получить это одно поле в DetailsView для извлечения информации из другой таблицы.
Можно ли добавить знак + (плюс) рядом с идентификатором PicklistID, а затем показать результаты другого запроса? (ВЫБЕРИТЕ ТЕКСТ ИЗ ПИКЛИСТА, ГДЕ PicklistID = @PicklistID ???)
ОБНОВЛЕНИЕ 1/11/12: PICKLISTID
в таблице PICKLIST
не является уникальным или первичным ключом, поэтому я не могу ссылаться на него из таблицы SURVEY
. Есть ли способ связать эти 2 столбца, чтобы я мог просто изменить свой оператор SELECT
в своем DetailsView
, чтобы включить PICKLISTID
?
ОБНОВЛЕНИЕ 1/23/12: Я все еще застрял на этом. Я не понимаю, как заставить это работать вообще. Помощь будет оценена. Я все еще новичок ....
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:Label ID="Label2" runat="server" Text="<h3>Manage Questions</h3>"></asp:Label>
<table style="width: 100%">
<tr>
<td align="right">
<asp:Label ID="Label1" runat="server" Text="Select Survey:"></asp:Label>
</td>
<td>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
DataSourceID="dsSurvey" DataTextField="SurveyName" DataValueField="SurveyID">
</asp:DropDownList>
</td>
</tr>
<tr>
<td colspan="2">
<asp:DetailsView ID="dvSurveyQuestions" runat="server" AllowPaging="True"
AutoGenerateRows="False" CellPadding="4" DataKeyNames="QuestionID"
DataSourceID="dsSurveyQuestions" ForeColor="#333333" GridLines="None"
Height="50px" Width="100%">
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<CommandRowStyle BackColor="#E2DED6" Font-Bold="True" />
<EditRowStyle BackColor="#999999" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<Fields>
<asp:BoundField DataField="QuestionID" HeaderText="QuestionID"
InsertVisible="False" ReadOnly="True" SortExpression="QuestionID" />
<asp:TemplateField HeaderText="Question" SortExpression="Question">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"
Text='<%# Bind("Question") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"
Text='<%# Bind("Question") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="lblQuestion" runat="server" Text='<%# Bind("Question") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Answer Type" SortExpression="AnswerType">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server"
SelectedValue='<%# Bind("AnswerType") %>'>
<asp:ListItem Value="S">Single Choice (radio button)</asp:ListItem>
<asp:ListItem Value="M">Multiple Choices (checkboxes)</asp:ListItem>
<asp:ListItem Value="T">Text (textbox)</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="DropDownList3" runat="server"
SelectedValue='<%# Bind("AnswerType") %>'>
<asp:ListItem Value="S">Single Choice (radio button)</asp:ListItem>
<asp:ListItem Value="M">Multiple Choices (checkboxes)</asp:ListItem>
<asp:ListItem Value="T">Text (textbox)</asp:ListItem>
</asp:DropDownList>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="lblAnswerType" runat="server"
Text='<%# Bind("AnswerType") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Question Type" SortExpression="QType">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList4" runat="server"
SelectedValue='<%# Bind("QType") %>'>
<asp:ListItem Value="Picklist">Picklist</asp:ListItem>
<asp:ListItem Value="Text">Text</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="DropDownList5" runat="server"
SelectedValue='<%# Bind("QType") %>'>
<asp:ListItem Value="Picklist">Picklist</asp:ListItem>
<asp:ListItem Value="Text">Text</asp:ListItem>
</asp:DropDownList>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="lblQType" runat="server" Text='<%# Bind("QType") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Answer" SortExpression="TEXT">
<EditItemTemplate>
</EditItemTemplate>
<InsertItemTemplate>
</InsertItemTemplate>
<ItemTemplate>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Bind("PicklistID") %>' />
<asp:SqlDataSource ID="dsPicklist" runat="server"
ConnectionString="<%$ ConnectionStrings:SurveyConnectionString %>"
SelectCommand="SELECT DISTINCT p.TEXT, p.PICKLISTID
FROM PICKLIST p JOIN C_Survey_Questions c
ON c.PicklistID = p.PICKLISTID
AND c.SurveyID = @SurveyID
ORDER BY p.TEXT">
<SelectParameters>
<asp:ControlParameter ControlID="HiddenField1" Name="PicklistID"
PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:Label ID="lblTEXT" runat="server" Text=""></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="QuestionNum" HeaderText="Question Number"
SortExpression="QuestionNum" />
<asp:BoundField DataField="Subsequence" HeaderText="Subsequence"
SortExpression="Subsequence" />
<asp:CheckBoxField DataField="Active" HeaderText="Active"
SortExpression="Active" />
<asp:BoundField DataField="Script" HeaderText="Script"
SortExpression="Script" />
<asp:CheckBoxField DataField="Question_Locked" HeaderText="Question Locked"
SortExpression="Question_Locked" />
<asp:BoundField DataField="QHelp" HeaderText="Question Help"
SortExpression="QHelp" />
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True"
ShowInsertButton="True" />
</Fields>
<FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" Width="10%" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:DetailsView>
</td>
</tr>
</table>
<asp:SqlDataSource ID="dsSurvey" runat="server"
ConnectionString="<%$ ConnectionStrings:SurveyConnectionString %>"
SelectCommand="SELECT [SurveyID], [SurveyName]
FROM [C_Survey]
ORDER BY [SurveyName]">
</asp:SqlDataSource>
<asp:SqlDataSource ID="dsSurveyQuestions" runat="server"
ConnectionString="<%$ ConnectionStrings:SurveyConnectionString %>"
DeleteCommand="DELETE FROM [C_Survey_Questions] WHERE [QuestionID] = @QuestionID"
InsertCommand="INSERT INTO [C_Survey_Questions] ([SurveyID], [Question], [QType],
[PickListID], [QuestionNum], [Subsequence], [Active], [Script],
[Question_Locked], [QHelp], [Createdate],
[Modifydate], [AnswerType])
VALUES (@SurveyID, @Question, @QType, @PickListID, @QuestionNum,
@Subsequence, @Active, @Script, @Question_Locked, @QHelp,
getdate(), getdate(), @AnswerType)"
SelectCommand="SELECT * FROM [C_Survey_Questions]
WHERE ([SurveyID] = @SurveyID)"
UpdateCommand="UPDATE [C_Survey_Questions] SET [SurveyID] = @SurveyID,
[Question] = @Question, [QType] = @QType,
[PickListID] = @PickListID, [QuestionNum] = @QuestionNum,
[Subsequence] = @Subsequence, [Active] = @Active,
[Script] = @Script, [Question_Locked] = @Question_Locked,
[QHelp] = @QHelp, [Modifydate] = getdate(),
[AnswerType] = @AnswerType
WHERE [QuestionID] = @QuestionID">
<DeleteParameters>
<asp:Parameter Name="QuestionID" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="SurveyID" Type="Int32" />
<asp:Parameter Name="Question" Type="String" />
<asp:Parameter Name="QType" Type="String" />
<asp:Parameter Name="PickListID" Type="String" />
<asp:Parameter Name="QuestionNum" Type="Int32" />
<asp:Parameter Name="Subsequence" Type="Int32" />
<asp:Parameter Name="Active" Type="Boolean" />
<asp:Parameter Name="Script" Type="String" />
<asp:Parameter Name="Question_Locked" Type="Boolean" />
<asp:Parameter Name="QHelp" Type="String" />
<asp:Parameter Name="Createdate" Type="DateTime" />
<asp:Parameter Name="Modifydate" Type="DateTime" />
<asp:Parameter Name="AnswerType" Type="String" />
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="SurveyID"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="SurveyID" Type="Int32" />
<asp:Parameter Name="Question" Type="String" />
<asp:Parameter Name="QType" Type="String" />
<asp:Parameter Name="PickListID" Type="String" />
<asp:Parameter Name="QuestionNum" Type="Int32" />
<asp:Parameter Name="Subsequence" Type="Int32" />
<asp:Parameter Name="Active" Type="Boolean" />
<asp:Parameter Name="Script" Type="String" />
<asp:Parameter Name="Question_Locked" Type="Boolean" />
<asp:Parameter Name="QHelp" Type="String" />
<asp:Parameter Name="Modifydate" Type="DateTime" />
<asp:Parameter Name="AnswerType" Type="String" />
<asp:Parameter Name="QuestionID" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
</asp:Content>
Partial Class Admin_ManageQuestions
Inherits System.Web.UI.Page
Protected Sub dsPicklist_ItemSelecting(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Dim myControl1 As Control = FindControl("lblTEXT")
If (Not myControl1 Is Nothing) Then
myControl1.DataBind()
Else
'Control not found
End If
End Sub
Protected Sub dvSurveyQuestions_ItemInserting(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles
dvSurveyQuestions.ItemInserting
'The DetailsView does not include SurveyID column...we need to set this column
during INSERT operations because each question must belong to some survey.
e.Values("SurveyID") = DropDownList1.SelectedValue
End Sub
Protected Sub dvSurveyQuestions_ItemUpdating(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles
dvSurveyQuestions.ItemUpdating
'The DetailsView does not include SurveyID column...we need to set this column
during UPDATE operations because each question must belong to some survey.
e.NewValues("SurveyID") = DropDownList1.SelectedValue
End Sub
Protected Sub dvSurveyQuestions_DataBound(ByVal sender As Object, ByVal e As
System.EventArgs) Handles dvSurveyQuestions.DataBound
'The event handler checks the row count of the DetailsView control.
If it is zero then the mode of the DetailsView is changed to Insert using
ChangeMode() method.
If dvSurveyQuestions.Rows.Count = 0 Then
dvSurveyQuestions.ChangeMode(DetailsViewMode.Insert)
End If
End Sub
End Class