需要从单元格数据或数据库数据中填充Gridview复选框属性

时间:2016-10-19 20:43:54

标签: asp.net vb.net

enter image description here

大家好,

我不是开发人员,但我总是尽力自己管理我的页面编码,然后打扰任何人并查看许多示例并将其应用到我的Web应用程序中,但这次我真的放弃了,不得不问。

我有一个Gridview,我将用它来更新一个CHECKBOX字段。 gridview有一个复选框控件,根据Database值,它的checked属性需要为True或False。 值仅为1和2

我编写了以下代码来捕获单元格标签并更改复选框属性但它没有工作

Protected Sub Refill_checkbox(ByVal sender As Object, ByVal e As System.EventArgs)


    Dim i As Integer

    For i = 0 To dg.Rows.Count - 1
        Dim Test As String = CType(dg.Rows(i).Cells(3).FindControl("Att_Type"), Label).Text

        If CType(dg.Rows(i).Cells(4).FindControl("Att_Type"), Label).Text = 1 Then

            CType(dg.Rows(i).Cells(6).FindControl("CheckBox_Attendance"), CheckBox).Checked = True
        Else
            CType(dg.Rows(i).Cells(6).FindControl("CheckBox_Attendance"), CheckBox).Checked = False
        End If
        Response.Write(Test)
    Next

End Sub

不幸的是,它甚至没有编写测试变量来查找它是否从gridview中捕获标签。

我的Gridview如下:

      <asp:GridView ID="dg" runat="server" BorderColor="#CCCCCC" BorderStyle="None" AutoGenerateColumns="False"  
                      BorderWidth="1px" CellPadding="4"
                      EnableModelValidation="True" ForeColor="Black" GridLines="Horizontal" 
                      Width="99%"  AllowPaging="True" PageSize="500" DataSourceID="SqlDataSource_BCS" >
            <Columns>
                <asp:TemplateField HeaderText="#">
                 <ItemTemplate>  
                        <%#Container.DataItemIndex + 1 %>  
                    </ItemTemplate>  
                </asp:TemplateField>

                <asp:BoundField DataField="Att_ID" HeaderText="Att_ID" 
                    SortExpression="Att_ID" />

                <asp:BoundField DataField="Emp_FullName" HeaderText="Emp_FullName" 
                    SortExpression="Emp_FullName" />

                <asp:BoundField DataField="Att_Desc" HeaderText="Att_Desc" 
                    SortExpression="Att_Desc" />

                <asp:BoundField DataField="Att_Type" HeaderText="Att_Type" 
                    SortExpression="Att_Type" />

                <asp:BoundField DataField="Att_Date" HeaderText="Att_Date" 
                    SortExpression="Att_Date" />


    <asp:templatefield HeaderText="Attendance" >

        <itemtemplate  >

         <asp:CheckBox ID="CheckBox_Attendance" runat="server"  />

        </itemtemplate>
        <itemstyle horizontalalign="left" />

    </asp:templatefield> 

                            </Columns>

            <FooterStyle BackColor="#CCCC99" ForeColor="Black" />
            <HeaderStyle BackColor="White" Font-Bold="True" BorderWidth="0px"/>
            <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
            <RowStyle BorderStyle="None" />
            <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
        </asp:GridView>

我不知道这样做的正确方法是什么。

提前致谢

1 个答案:

答案 0 :(得分:0)

您可以将复选框直接绑定到字段,如此...

<asp:CheckBox ID="CheckBox_Attendance" runat="server" Checked='<%# Eval("Att_type").ToString() = "1" %>'  />

否则,直接在gridview rowdatabound事件中处理它:

在gridview上添加以下内容:

<asp:GridView ... OnRowDatabound="dg_RowDataBound">

将您的TemplateField更改为:

<asp:TemplateField HeaderText="Attendance">
    <ItemTemplate>
        <asp:HiddenField id="hfType" Value='<%# Eval("Att_Type") %>' />
        <asp:CheckBox ID="CheckBox_Attendance" runat="server" />
    </ItemTemplate>
    <ItemStyle HorizontalAlign="left" />
</asp:TemplateField>

在您的代码中

Protected Sub dg_RowDataBound(sender As Object, e As GridViewRowEventArgs)
      Dim cbAttendance As Checkbox = e.Row.FindControl("CheckBox_Attendance")
      Dim hfType as Hiddenfield = e.Row.FindControl("hfType")

      If hfType.Value = "1" Then
         cbAttendance.Checked = True

End Sub