2016-09-15 36 views
0

我想只绑定表列到CheckBoxList,然后所选列应显示在GridView中。将GridView列绑定到CheckBoxList以动态方式在C中#

到目前为止我的代码是:

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++; 
    } 
} 

回答

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(); 
       } 
      } 
     } 
    } 
} 
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); 

       } 
      } 
     } 

我想你使用此代码。

+0

兄弟我没有在gridview中使用boundfield ...我想将数据库表格列绑定到checkboxlist,然后在gridview中动态显示它... – Vinoth

+0

@Vinoth请发送您的代码。 –

+0

我正在使用VS2015创建一个网页,我从数据库中返回一个表格。我想要做的是用数据库返回的表中的列名称填充一个复选框列表。 有没有办法做到这一点? 或者我可以查询数据库,并让它返回一个列名称的表? 复选框列表将用于允许用户决定他们想要显示哪些列。 – Vinoth

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; 
        } 
       } 
      } 
     } 
    } 

而且

<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 .aspx页上。如果它们是自动生成的,则这些列不是GridView Columns Collection的一部分。

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