2013-10-28 257 views
1

我的asp.net應用程序當前使用Telerik RadGrid顯示產品數據。在頁面頂部,我有一個包含4個不同類別的下拉列表。根據用戶對類別的選擇,網格中的複選框將被選中或不選中。該網站的1500種產品將始終顯示在網格中,它的複選框將會改變。下拉列表來填充複選框

例如:產品1位於類別A中,因此如果用戶在下拉列表中單擊了類別B,則產品1旁邊的複選框將被取消選中。要檢查的唯一方法是如果用戶更改下拉菜單以查看A類中的當前產品。

我無法解決如何處理此問題。例如,行if (ProductInMarket.Checked = true) throws an error saying名稱ProductInMarket'在當前上下文中不存在。「我遇到的第二個問題是我無法弄清楚如何完成UpdateMarket方法。當你在編碼過程中吃午飯時會發生這種情況。 :/

這是我到目前爲止,我真的很感謝這裏的一些幫助。

<asp:DropDownList ID="MarketDropDownList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="MarketDropDownList_SelectedIndexChanged" AppendDataBoundItems="true"> 
</asp:DropDownList> 


<telerik:GridTemplateColumn AllowFiltering="true" HeaderText="Product ID" UniqueName="productid" ReadOnly="true"> 
<HeaderTemplate> 
    <asp:CheckBox ID="headerCheck" runat="server"          onClick="javascript:SelectDeselectAllCheckboxes(this);" /> 
</HeaderTemplate> 
<ItemTemplate> 
    <asp:Checkbox ID="ProductInMarket" runat="server" /> 
    <asp:HiddenField runat="server" ID="ProductID" /> 
    </ItemTemplate> 
    </telerik:GridTemplateColumn> 



private void UpdateMarket(string MarketID) 
    { 
     //add products to market when checked 
     if (ProductInMarket.Checked = true) 
     { 
      string strConn = ConfigurationManager.ConnectionStrings["DBConnectingString"].ToString(); 
      using (SqlConnection con = new SqlConnection(strConn)) 
      { 
       using (SqlCommand cmd = new SqlCommand()) 
       { 
        cmd.Connection = con; 
        cmd.CommandType = CommandType.Text; 
        cmd.CommandText = "UPDATE table SET ProductID = @ProductID WHERE MarketID = @MarketID"; 
       } 
      } 
     } 
    } 
+0

所以你的下拉列表中真正做在網格中的1500行的大規模更新? –

+0

不幸的是,是的。我寧願不這樣做,因爲它看起來會超級慢,但這是他們想要的。你有不同的建議嗎? – jlg

+0

因此,下拉式選擇實際上只是一種便利,因此用戶不必檢查/取消選中1500次? –

回答

0

我建議使用批量更新通過Performing Batch Operations Using DataAdapters

注意:UpdateBatchSize屬性是此處的關鍵,因爲它告訴ADO.NET每批次中要發送多少個項目。將其設置爲零將強制批量儘可能大,將其設置爲1基本上會忽略批量,因爲它會一次發送一個。考慮到性能和內存使用情況(較大的批處理會消耗更多的內存,直到清理完畢),您需要使用此值來獲得最佳值。

+0

很高興爲您提供幫助,隨時爲答案投票。 :-) –

0
<asp:DropDownList ID="MarketDropDownList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="MarketDropDownList_SelectedIndexChanged" AppendDataBoundItems="true"> 
</asp:DropDownList> 


<telerik:GridTemplateColumn AllowFiltering="true" HeaderText="Product ID" UniqueName="productid" ReadOnly="true"> 
<HeaderTemplate> 
    <asp:CheckBox ID="headerCheck" runat="server"          onClick="javascript:SelectDeselectAllCheckboxes(this);" /> 
</HeaderTemplate> 
<ItemTemplate> 
    <asp:Checkbox ID="ProductInMarket" runat="server" /> 
    <asp:HiddenField runat="server" ID="ProductID" /> 
    </ItemTemplate> 
    </telerik:GridTemplateColumn> 



private void UpdateMarket(string MarketID) 
    { 
     //add products to market when checked 
     if (ProductInMarket.Checked = true) 
     { 
      string strConn = ConfigurationManager.ConnectionStrings["DBConnectingString"].ToString(); 
      using (SqlConnection con = new SqlConnection(strConn)) 
      { 
       using (SqlCommand cmd = new SqlCommand()) 
       { 
        cmd.Connection = con; 
        cmd.CommandType = CommandType.Text; 
        cmd.CommandText = "UPDATE table SET ProductID = @ProductID WHERE MarketID = @MarketID"; 
       } 
      } 
     } 
    } 

試試這個

jsfiddle