2016-09-15 1 views
0

Ich möchte nur Tabellenspalten an CheckBoxList binden und dann die ausgewählten Spalten in einem GridView angezeigt werden.Binding GridView-Spalten zu CheckBoxList Dynamisch in C#

Mein Code so weit ist:

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

Antwort

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" /> 

in aspx.cs Code

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

       } 
      } 
     } 

Ich glaube, Sie diesen Code verwenden.

+0

Bro ich habe nicht boundfield in gridview verwendet ... ich möchte Datenbanktabellenspalten an checkboxlist binden und dann dynamisch in gridview zeigen ... – Vinoth

+0

@Vinoth Bitte senden Sie Ihren Code. –

+0

Ich erstelle eine Webseite, die VS2015 verwendet Ich gebe eine Tabelle aus einer Datenbank zurück. Ich möchte eine Checkbox-Liste mit den Spaltennamen aus der von der Datenbank zurückgegebenen Tabelle ausfüllen. Gibt es das überhaupt, um das zu tun? oder kann ich die Datenbank abfragen und sie eine Tabelle der Spaltennamen zurückgeben lassen? Die Checkbox-Liste wird verwendet, damit der Benutzer entscheiden kann, welche Spalten angezeigt werden sollen. – Vinoth

0

hier ein komplettes Beispiel Gridview Spalten auf einem CheckBoxList Basis zu verstecken.

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

Und auf der ASPX-Seite

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

Beachten Sie, dass AutoGenerateColumns auf false gesetzt ist. Wenn sie automatisch generiert werden, sind die Spalten nicht Teil der GridView Columns Collection.

Und natürlich HeaderText="xxx" müssen die Spaltennamen aus der Datenbank übereinstimmen, die in der DataTable gespeichert sind.