2016-01-21 66 views
1

我有兩個下拉列表Complaint_Type和Complaint_SubType。使用SqlDataSource我已經填充了這兩個。當我選擇「類型」下拉列表時,SubType下拉列表正確填充。當我選擇這些值並按提交併檢入數據庫時​​,類型和子類型值都是相同的。級聯下拉列表,第二個下拉列表存儲數據庫中的錯誤值

的.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(); 
     } 
    } 

Values stored in database

+1

我不是在asp.net但firts檢查什麼,你從客戶端設置相關的前收到@ PARAM – scaisEdge

回答

1

的原因是因爲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> 
相關問題