Установите / снимите флажки на основе значения базы данных

#.net #asp.net #sql #gridview #checkbox

#.net #asp.net #sql #просмотр сетки #флажок

Вопрос:

У меня есть gridview, который содержит флажки и поля в базе данных sql Server, которая имеет тип данных bit .

Если значение в таблице базы данных установлено равным 1 , то флажок в gridview должен быть установлен и отключен, в противном случае его следует снять и включить.

Это должно произойти во время привязки данных. Как выполнить эту задачу?

Комментарии:

1. AFAIK, в таблице уже есть столбец типа флажка.

Ответ №1:

 <asp:TemplateField>
    <ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" Enabled='<%# Eval("ColumnName") ? false : true %>' Checked='<%# Eval("ColumnName") %>' />
      </ItemTemplate>
  </asp:TemplateField>
  

Ответ №2:

Вы должны указывать напрямую, когда когда-либо объявляете в 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>
  

Ответ №3:

Вы могли бы использовать TemplateField и событие RowDataBound в GridView для достижения того, чего вы хотите. Вот полный пример:

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>
  

Codebehind:

 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:

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.
Z — это строка, которая содержит значение.
Я проверяю для одного столбца в каждой строке, совпадает ли он с ‘z’, и если он совпадает, то установите флажок в флажок.
O — счетчик для итерации в каждой строке.