【问题标题】:Dropdown list to populate checkboxes用于填充复选框的下拉列表
【发布时间】:2013-10-28 19:44:20
【问题描述】:

我的 asp.net 应用程序目前使用 Telerik RadGrid 来显示产品数据。在页面顶部,我有一个包含 4 个不同类别的下拉列表。根据用户选择的类别,网格中的复选框将被选中或不选中。该网站的 1500 种产品将始终显示在网格中,复选框将发生变化。

例如:产品 1 属于类别 A,因此如果用户点击下拉列表中的类别 B,产品 1 旁边的复选框将被取消选中。检查的唯一方法是用户是否更改下拉列表以查看当前在类别 A 中的产品。

我在试图弄清楚如何解决这个问题时遇到了麻烦。一方面,if (ProductInMarket.Checked = true) throws an error sayingThe name 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";
                 }
             }
         }
     }

【问题讨论】:

  • 那么你的下拉列表真的是在对网格中的 1500 行进行大规模更新吗?
  • 不幸的是,是的。我宁愿不这样做,因为它看起来会超级慢,但这就是他们想要的。你有不同的建议吗?
  • 所以下拉选择真的只是为了方便用户不必勾选/取消勾选 1500 次?
  • 您可以使用自定义分页来限制一次返回的记录数:demos.telerik.com/aspnet-ajax/grid/examples/programming/…
  • @IrishChieftain - OP 有相反的问题,同时更新 1,500 行,显示不是 OP 面临的直接问题。

标签: asp.net checkbox sql-update html-select


【解决方案1】:

我建议通过Performing Batch Operations Using DataAdapters 使用批量更新。

注意:UpdateBatchSize 属性是这里的关键,因为它告诉 ADO.NET 每批发送多少项目。将其设置为零将强制批处理尽可能大,将其设置为 1 基本上会使其忽略批处理,因为它会一次发送一个。您需要使用此值来获得最佳值,同时考虑性能和内存使用情况(较大的批次将占用更多的内存,直到它被清理)。

【讨论】:

  • 很高兴这对您有所帮助,也请随时为答案投票。 :-)
【解决方案2】:
<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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多