我有两个下拉列表 Complaint_Type 和 Complaint_SubType。使用 SqlDataSource 我已经填充了两者。当我选择类型下拉列表时,子类型下拉列表得到正确填充。当我选择值并按提交并检查数据库时,类型和子类型值都相同。
.aspx代码
<asp:ScriptManager ID="smDDL" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="upDDL" runat="server">
<ContentTemplate>
<div class="form-group" style="margin-bottom: 25px;">
<asp:Label ID="lblCType" runat="server" Text="Complaint Type" data-toggle="tooltip" title="Select Complaint Type" />
<asp:RequiredFieldValidator ID="RfvDDLCompType" runat="server" ErrorMessage="Please Select Complaint Type" ControlToValidate="ddlCType" ForeColor="Red" InitialValue="0" Display="Dynamic"> *</asp:RequiredFieldValidator>
<asp:DropDownList ID="ddlCType" runat="server" CssClass="form-control" DataSourceID="SqlDataSource1" DataTextField="Comp_Type" DataValueField="Type_ID" AutoPostBack="True" OnDataBound="DDLCTypeDataBound" Style="width: 400px">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ComplaintWebsiteConnectionString %>" SelectCommand="SELECT * FROM [Complaint_Type]"></asp:SqlDataSource>
</div>
<div class="form-group" style="margin-bottom: 25px;">
<asp:Label ID="lblSubType" runat="server" Text="Complaint Sub Type" data-toggle="tooltip" title="Select Complaint Sub Type" />
<asp:RequiredFieldValidator ID="rfvDDlSubType" runat="server" ErrorMessage="Please Select Complaint Sub Type" ControlToValidate="ddlSubType" ForeColor="Red" InitialValue="0" Display="Dynamic"> *</asp:RequiredFieldValidator>
<asp:DropDownList ID="ddlSubType" runat="server" CssClass="form-control" DataSourceID="SqlDataSource2" DataTextField="Comp_SubType" DataValueField="Type_ID" OnDataBound="DDLSubTypeDataBound" Style="width: inherit">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ComplaintWebsiteConnectionString %>" SelectCommand="SELECT * FROM [Complaint_SubType] WHERE ([Type_ID] = @Type_ID2)">
<SelectParameters>
<asp:ControlParameter ControlID="ddlCType" Name="Type_ID2" PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
</div>
</ContentTemplate>
</asp:UpdatePanel>
.cs代码
protected void Page_Load(object sender, EventArgs e)
{
}
protected void DDLCTypeDataBound(object sender, EventArgs e)
{
ddlCType.Items.Insert(0, new ListItem("Select", "0"));
}
protected void DDLSubTypeDataBound(object sender, EventArgs e)
{
ddlSubType.Items.Insert(0, new ListItem("Select", "0"));
}
protected void btn_Reset(object Sender, EventArgs e)
{
}
protected void btnReport_Click(object Sender, EventArgs e)
{
SqlConnection con = new SqlConnection(Utils.Connection);
String query = "insert into CITIZEN_COMPLAINTS(TYPE, SUBTYPE, LOCATION, DESCRIPTION, IMAGE) values (@TYPE, @SUBTYPE, @LOCATION, @DESCRIPTION, @IMAGE)";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.Add("@TYPE", SqlDbType.Int).Value = ddlCType.SelectedValue;
cmd.Parameters.Add("@SUBTYPE", SqlDbType.Int).Value = ddlSubType.SelectedValue;
cmd.Parameters.Add("@LOCATION", SqlDbType.VarChar).Value = txtLoc.Text;
cmd.Parameters.Add("@DESCRIPTION", SqlDbType.VarChar).Value = txtDesc.Text;
cmd.Parameters.Add("@IMAGE", SqlDbType.VarChar).Value = Utils.file_upload(fuImage);
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
//...
}
finally
{
con.Close();
}
}
最佳答案
原因是因为 DataValueField="Type_ID"
对于这些下拉菜单的标记中的两个下拉菜单是相同的。
对于子类型的第二个下拉列表,您应该有类似 DataValueField="SubType_ID"
的内容。
假设 Complaint_SubType
表中的主键列是 SubType_ID
,下面的标记将解决您的问题。请注意这两个标记中的 DataValueField
,它应该是不同的。
类型下拉
<asp:DropDownList ID="ddlCType" runat="server" CssClass="form-control"
DataSourceID="SqlDataSource1" DataTextField="Comp_Type" DataValueField="Type_ID"
AutoPostBack="True" OnDataBound="DDLCTypeDataBound" Style="width: 400px">
</asp:DropDownList>
子类型下拉菜单
<asp:DropDownList ID="ddlSubType" runat="server" CssClass="form-control"
DataSourceID="SqlDataSource2" DataTextField="Comp_SubType" DataValueField="SubType_ID"
OnDataBound="DDLSubTypeDataBound" Style="width: inherit">
</asp:DropDownList>
关于sql - 级联下拉列表,第二个下拉列表在数据库中存储错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34927644/