【问题标题】:updating database with checkboxes使用复选框更新数据库
【发布时间】:2011-10-06 00:29:58
【问题描述】:

我有一个数据网格,每一行都有一个复选框。也可以更新每一行中的每个字段

用户可以更新多行并选中任何复选框。

点击提交按钮后,所有数据都应更新。我需要复选框来更新数据库中的布尔值(或者布尔类型用于 sql server)。

  1. 如何实现复选框以更新数据库中的表?
  2. 如何通过单击提交按钮获取所有要更新的数据?

【问题讨论】:

    标签: c# jquery asp.net


    【解决方案1】:

    如果您使用的是 GridView,基于您获得的上一个示例中的示例,您可以执行此操作。 **这是半伪代码,请注意**

    <asp:gridview id="CustomersGridView" 
        datasourceid="CustomersSqlDataSource" 
        autogeneratecolumns="false"
        autogenerateeditbutton="true"
        allowpaging="true" 
        datakeynames="CustomerID"  
        runat="server">
    
        <columns>
          <asp:templatefield>
             <itemtemplate> <%-- This is itemtemplate so they are visible by default --%>
                <asp:CheckBox ID="cbVerify" runat="server"></asp:CheckBox>
                <asp:HiddenField ID="hidID" runat="server" Value='<%# Bind("CustomerID") %>'></asp:HiddenField>
             </itemtemplate>
          </asp:templatefield>
          <asp:boundfield datafield="CustomerID" readonly="true" headertext="Customer ID"/>
          <asp:boundfield datafield="CompanyName" readonly="true" headertext="Customer Name"/>
          <asp:boundfield datafield="Address" headertext="Address"/>
          <asp:boundfield datafield="City" headertext="City"/>
          <asp:boundfield datafield="PostalCode" headertext="ZIP Code"/>
        </columns>
    </asp:gridview>
    
    <asp:Button ID="btSubmit" runat="server" OnClick="btSubmit_Click"></asp:Button>
    

    处理此问题的代码

    public void btSubmit_Click(object sender, EventArgs e)
    {
      foreach (GridViewRow row in CustomersGridView.Rows) 
      {
        CheckBox cbVerify = (CheckBox)row.FindControl("cbVerify");
        HiddenField hidID = (HiddenField)row.FindControl("hidID");
    
        // Do your validation of the data here
        ..
    
        if (cbVerify != null)
        {
          // Add fields and update
          sqlRecord.UpdateParameters["ID"].DefaultValue = hidID.Value;
          sqlRecord.UpdateParameters["Valid"].DefaultValue = cbVerify.Checked.ToString();
          sqlRecord.Update();
        }
    }
    

    这应该会让你朝着特定的方向看。

    【讨论】:

    • 非常感谢您的大力帮助,隐藏字段的目的是什么?
    • 隐藏字段使获取记录的 ID 变得更简单,以便您可以更新它。这是强制性的,因为您可以使用 row 对象来获取密钥,但这更容易。
    【解决方案2】:

    遍历数据网格并将您要更新的所有数据存储在数组或类似物中。 Sql server 有一个bit 数据类型,如果复选框关闭,您可以将其设置为0,如果它是checked,则可以将其设置为1。收集完所有数据后,将其传递到数据层以进行 sql 更新

    您可以使用DataGrid 对象来遍历其单元格/控件。例如,使用嵌套循环可以:

    myDG.Items[index1].Cells[index2].Controls[0]
    

    编辑:这取决于您在列中拥有的输入控件,因为您必须强制转换它们。假设您有一个数据网格,其中包含 10 列和除最后一列之外的所有列中的文本框,即 CheckBox,您会这样做:

    CheckBox cb = null;
    TextBox tb = null;
    List<string> myList = new List<string>();
    for(int row = 0; row < myDG.Items.Count; row++)
    {
      for(int col = 0; col < myDG.Columns.Count; col++)
      {
        if(col < 9){
          tb = myDG.Items[row].Cells[col].Controls[0] as TextBox;
          myList.Add(tb.Text);
        }
        else{
          cb = myDG.Items[row].Cells[col].Controls[0] as CheckBox;
          myList.Add(((cb.Checked) ? "1" : "0"));
        }
      }
    }
    

    如果您愿意,也可以使用 2D 数组/列表来存储。高温

    【讨论】:

    • 对不起,你能举个aspx html代码的例子吗
    • 为什么?它只是一个有 10 列的数据网格,如果没有绑定并自动生成,则为 0
    • 这是一个非常聪明的解决方案,我会尝试一下
    • 我想我必须退后一步。我可以将数据库中的数据显示到网格视图中;但是,我不知道如何将 gridview 更改为具有文本框而不是列的“标签”,你知道吗?
    • 哦,我以为你已经在使用文本框之类的了。您如何允许用户直接使用标签编辑 gridview(我以为我们是在通过帖子谈论 datagrid)?无论如何,我相信您必须研究以下内容:&lt;asp:GridView ID="GridView1" runat="server"&gt; &lt;Columns&gt; &lt;asp:TemplateField&gt; &lt;ItemTemplate&gt;&lt;!--asp:textbox here--&gt;&lt;/ItemTemplate&gt; &lt;/asp:TemplateField&gt; &lt;/Columns&gt; &lt;/asp:GridView&gt;
    猜你喜欢
    • 2016-11-30
    • 2017-06-06
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2013-11-07
    • 2014-07-09
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多