在C#中动态地将GridView列绑定到CheckBoxList

时间:2016-09-15 10:40:35

标签: c# asp.net sql-server

我想仅将表格列绑定到CheckBoxList,然后所选列应显示在GridView中。

到目前为止我的代码是:

public void BindCheckBoxList(DataSet ds) 
{ 
    int i = 0; 
    foreach (DataColumn dc in ds.Tables[0].Columns) 
    { 
        ListItem li = new ListItem(dc.ToString(), i.ToString());   
        CheckBoxList1.Items.Add(li); i++; 
    } 
}

3 个答案:

答案 0 :(得分:0)

protected void mainGridView_RowDataBound(object sender, GridViewRowEventArgs e)
       {
           if (e.Row.RowType == DataControlRowType.DataRow &&
             (e.Row.RowState == DataControlRowState.Normal ||
              e.Row.RowState == DataControlRowState.Alternate))
           {

               if (e.Row.Cells[1].FindControl("selectCheckbox") == null)
               {
                   CheckBox selectCheckbox = new CheckBox();
                   //Give id to check box whatever you like to
                   selectCheckbox.ID = "newSelectCheckbox";
                   e.Row.Cells[1].Controls.Add(selectCheckbox);

               }
           }
       }

我认为您使用此代码。

答案 1 :(得分:0)

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="HobbyId">
<Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:CheckBox ID="chkSelect" runat="server" Checked='<%# Eval("IsSelected") %>' />
        </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="Hobby" HeaderText="Hobby" ItemStyle-Width="150px" />
</Columns>
</asp:GridView>
<br />
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="Save" />

在aspx.cs代码中

private void BindGrid()
{
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT [HobbyId], [Hobby], [IsSelected] FROM Hobbies"))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
                }
            }
        }
    }
}

答案 2 :(得分:0)

这是一个基于CheckBoxList隐藏GridView列的完整示例。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //fill the datatable from the database
            DataTable dt = //fill the table here...

            //bind the table to the grid
            GridView1.DataSource = dt;
            GridView1.DataBind();

            //loop all the datatable columns to fill the checkboxlist
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                CheckBoxList1.Items.Insert(i, new ListItem(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName, true));
            }
        }
    }

    protected void CheckBoxList1_TextChanged(object sender, EventArgs e)
    {
        //loop all checkboxlist items
        foreach (ListItem item in CheckBoxList1.Items)
        {
            if (item.Selected == true)
            {
                //loop all the gridview columns
                for (int i = 0; i < GridView1.Columns.Count; i++)
                {
                    //check if the names match and hide the column
                    if (GridView1.HeaderRow.Cells[i].Text == item.Value)
                    {
                        GridView1.Columns[i].Visible = false;
                    }
                }
            }
        }
    }

在.aspx页面上

<asp:CheckBoxList ID="CheckBoxList1" runat="server" OnTextChanged="CheckBoxList1_TextChanged" AutoPostBack="true"></asp:CheckBoxList>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="field01" HeaderText="Column A" />
        <asp:BoundField DataField="field02" HeaderText="Column B" />
        <asp:BoundField DataField="field03" HeaderText="Column C" />
        <asp:BoundField DataField="field04" HeaderText="Column D" />
        <asp:BoundField DataField="field05" HeaderText="Column E" />
    </Columns>
</asp:GridView>

请注意,AutoGenerateColumns设置为false。如果它们是自动生成的,则列不是GridView列集合的一部分。

当然HeaderText="xxx"必须与数据库中存储在DataTable中的列名相匹配。