【问题标题】:Check/uncheck check boxes based on database value根据数据库值选中/取消选中复选框
【发布时间】:2011-08-14 15:14:01
【问题描述】:

我有一个gridview,其中包含sql server 数据库中的复选框和字段,其数据类型为bit

如果数据库表中的值设置为1,则应选中并禁用gridview中的复选框,否则应取消选中并启用。

这应该发生在数据绑定时。如何完成这项任务?

【问题讨论】:

  • AFAIK,网格已经有一个复选框类型列。

标签: .net asp.net sql gridview checkbox


【解决方案1】:

int o = 0;

        foreach (GridViewRow row in GridView1.Rows)
            {

                if (z == ds1.Tables[4].Rows[o]["Name"].ToString())
                {
                    CheckBox chk = (CheckBox)row.FindControl("chkusergroup");
                    chk.Checked = true;
                }
                else
                {
                    CheckBox chk = (CheckBox)row.FindControl("chkusergroup");
                    chk.Checked = false;


                }

            o++;





            }`enter code here`

Gridview1 是 Gridview ID。 Z 是一个包含值的字符串。 我正在检查每一行中的一列是否与“z”匹配,如果匹配,则将复选框设置为选中。 O 是在每一行中迭代的计数器。

【讨论】:

    【解决方案2】:
    <asp:TemplateField>
        <ItemTemplate>
    <asp:CheckBox ID="CheckBox1" runat="server" Enabled='<%# Eval("ColumnName") ? false : true %>' Checked='<%# Eval("ColumnName") %>' />
          </ItemTemplate>
      </asp:TemplateField>
    

    【讨论】:

      【解决方案3】:

      您可以使用 TemplateField 和 GridView 的 RowDataBound 事件来实现您想要的。这是一个完整的例子:

      ASPX:

      <asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
          <Columns>
              <asp:TemplateField>
                 <ItemTemplate>
                      <asp:CheckBox ID="ChkMyBitColumn" runat="server" />
                  </ItemTemplate>
              </asp:TemplateField>
          </Columns>
      </asp:GridView>
      

      代码隐藏:

      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
          If Not IsPostBack Then
              'create some Testdata'
              BindGrid()
          End If
      End Sub
      
      Private Sub BindGrid()
          Dim tbl As New DataTable
          Dim rnd As New Random
          tbl.Columns.Add(New DataColumn("MyBitColumn", GetType(Boolean)))
          For i As Int32 = 1 To 10
              Dim row As DataRow = tbl.NewRow
              row("MyBitColumn") = rnd.Next(1, 3) Mod 2 = 0 'get a random boolean'
              tbl.Rows.Add(row)
          Next
          Me.GridView1.DataSource = tbl
          Me.GridView1.DataBind()
      End Sub
      
      Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
          If e.Row.RowType = DataControlRowType.DataRow Then
              Dim row = DirectCast(e.Row.DataItem, DataRowView).Row
              Dim MyBitColumnValue = DirectCast(row("MyBitColumn"), Boolean)
              Dim ChkMyBitColumn = DirectCast(e.Row.FindControl("ChkMyBitColumn"), CheckBox)
              ChkMyBitColumn.Checked = MyBitColumnValue
              ChkMyBitColumn.Enabled = Not ChkMyBitColumn.Checked
          End If
      End Sub
      

      【讨论】:

        【解决方案4】:

        当你像下面这样在 gridview 中声明时,你必须直接给出。

         <ItemTemplate>
            <asp:CheckBox ID="chkAlert1" runat="server" Visible="true" Enabled="false" Checked='<%# DataBinder.Eval(Container,"DataItem.Alert") %>' />
            <asp:CheckBox ID="chkAlert" runat="server" Visible="false" Enabled="true" Checked='<%# DataBinder.Eval(Container,"DataItem.Alert") %>' />
         </ItemTemplate>
        

        【讨论】:

          猜你喜欢
          • 2016-07-13
          • 1970-01-01
          • 2018-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-08
          • 1970-01-01
          • 2014-02-06
          相关资源
          最近更新 更多