如何在DataTable中添加复选框?

时间:2013-08-30 04:24:18

标签: c# asp.net

我想在DataTable和bind ti网格视图中添加复选框。

所以我试试这个。

DataTable dt = new DataTable("UserAcess");

DataColumn dc1 = new DataColumn("PageName");
dt.Columns.Add(dc1);

foreach (var item in RoleName)
{   
    DataColumn  dc = new DataColumn(item.RoleName);
    dt.Columns.Add(dc);                     
}

int i=0, j = 0;
foreach (var page in pageName)
{
     i +=1;
    DataRow dr = dt.NewRow();

    dr["PageName"] = page.PAGE_NAME;   

    j = 0;                   

    foreach (var role in RoleName)
    {                  
        dt.Columns.Add(new DataColumn("che" + i.ToString() + j.ToString(), typeof(System.Web.UI.WebControls.CheckBox)));                        
        j += 1;
        CheckBox ck = new CheckBox();                   
        ck.Checked = true;                   
        dr[role.RoleName] = ck;                   

    }
    dt.Rows.Add(dr);
}    
NewDataGrid.DataSource = dt;
NewDataGrid.DataBind();

但是这样就出来了

enter image description here

我想添加复选框。 我该怎么办?

6 个答案:

答案 0 :(得分:1)

只需在datatable中添加一个布尔字段,它就会被映射为datagridview中的复选框字段。

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("IsActive", typeof(bool))); 

现在,IsActive字段将在网格视图上映射为Checkbox。

答案 1 :(得分:1)

您可以执行以下操作

<asp:GridView ID="GridView1" runat="server">
            <Columns>
                <asp:CheckBoxField HeaderText="Select" DataField="IsActive" />
            </Columns>
        </asp:GridView>

不要将复选框字段添加到数据表。只需为其添加一个布尔字段并将其绑定到网格视图的复选框字段

答案 2 :(得分:1)

将您的代码更改为:

为boolean类型的每个角色创建列

foreach (var item in RoleName)
{   
    DataColumn  dc = new DataColumn(item.RoleName, typeof(bool));
    dt.Columns.Add(dc);                     
}

然后更改代码,在datacolumn中使用复选框来存储列的布尔值true / false值

foreach (var role in RoleName)
{                  
    dr[role.RoleName] = true;    
}

最终守则:

DataTable dt = new DataTable("UserAcess");

DataColumn dc1 = new DataColumn("PageName");
dt.Columns.Add(dc1);

foreach (var item in RoleName)
{   
    DataColumn  dc = new DataColumn(item.RoleName, typeof(bool));
    dt.Columns.Add(dc);                      
}

foreach (var page in pageName)
{
    DataRow dr = dt.NewRow();
    dr["PageName"] = page.PAGE_NAME; 

    foreach (var role in RoleName)
    {                  
        dr[role.RoleName] = true; 
    }
    dt.Rows.Add(dr);
}    

NewDataGrid.DataSource = dt;
NewDataGrid.DataBind();

答案 3 :(得分:0)

您必须添加Boolean类型的字段并在DataTable中指定bool值,然后将该DataTable与网格视图绑定。

尝试关注this Link

答案 4 :(得分:0)

您需要创建一个选项来启用它。默认情况下,配置器处于禁用状态。您可以按如下方式执行此操作。

<script type="text/javascript">
    function fnSelectAll() {
        const disabledAllCheckboxInPage = 
        Array.from(document.querySelectorAll("input[type='checkbox']"))
        disabledAllCheckboxInPage.forEach(item => item.disabled = false)
    }
</script>

<asp:GridView ID="GridView1" runat="server">
   <Columns>
       <asp:TemplateField>
            <HeaderTemplate>
               <input id="chkAll" type="checkbox" onclick="fnSelectAll()" />
             </HeaderTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

答案 5 :(得分:0)

我找到了另一种方法来解决您的问题,之后 gridview1.DataBind();输入下面的代码。

 gridview1.DataSource = dt;
 gridview1.DataBind ()

 foreach (GridViewRow row in gridview1.Rows)
 {
    for (int i = 0; i <= row.Cells.Count - 1; i++)
    {
       if (i > 1)
       {
         CheckBox check = (row.Cells[i] as DataControlFieldCell).Controls[0] as CheckBox;
         check.Enabled = true;
       }
    }
 }