如何将数据库中的复选框列表插入值提取回复选框列表

时间:2017-01-26 16:36:30

标签: c# asp.net gridview ado.net

我构建了一个演示应用程序,其中我使用了一个复选框列表来获取爱好并在数据库中输入这些值,如下所示:

复选框列表的ASP代码为:

<asp:CheckBoxList ID="chkboxlsthobbies" runat="server" RepeatDirection="Horizontal">
        <asp:ListItem>cricket</asp:ListItem>
        <asp:ListItem>football</asp:ListItem>
        <asp:ListItem>pool</asp:ListItem>
        <asp:ListItem>basketball</asp:ListItem>
        <asp:ListItem>rugby</asp:ListItem>
    </asp:CheckBoxList>
    <asp:Button ID="Button1" runat="server" Text="submit" OnClick="Button1_Click" />

在数据库中输入该值的相应C#代码如下:

protected void Button1_Click(object sender, EventArgs e)
    {
        string str = string.Empty;
        foreach (ListItem item in chkboxlsthobbies.Items)
        {
            if (item.Selected)
            {
                str += string.Format("{0}, ", item.Text);
            }
        }

        SqlCommand cmd = new SqlCommand("insert into [CheckboxTable] values('" + str + "')", con);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
        bindgrid();
    }

现在我使用Gridview来绑定表数据并显示它,并且在那里,我有一个onRowEditing和onRowDeleting事件。

Gridview代码如下:

        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Button ID="gvtxtedit" runat="server" CommandName="Edit" Text="Edit" />
                <asp:Button ID="gvtxtdelete" runat="server" CommandName="Delete" Text="Delete" />
                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Hobbies">
            <ItemTemplate>
                <asp:Label ID="gvlblfirstname" runat="server"  Text='<%#Eval("Hobbies") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        </Columns>
    </asp:GridView>

Gridview绑定方法如下:

protected void bindgrid()
    {
        SqlCommand cmd = new SqlCommand("select * from [CheckboxTable]", con);
        con.Open();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

现在我完全陷入这个问题通常我能够将任何字段的值提取回TextBox或表单上的下拉列表

示例:

txtfirstname.Text = dt.Rows[0]["firstname"].ToString();
在onRowEditing事件中

将字段值提取回表单上的控件,我可以为文本框和下拉列表执行此操作。

问题是我无法弄清楚如何获取由&#34;,&#34;分隔的多个值。回到一个复选框列表,因为有多个值,我已经尝试了很长时间了。

最后一个问题是将数据库中的值提取回GridView的onRowEditing事件中的复选框列表。

1 个答案:

答案 0 :(得分:0)

我在onRowEditing Gridview函数上写了这个函数来实现上述功能,即:将保存在数据库中的复选框列表值返回到Gridview的onRowEditing事件内表单上的复选框列表

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        chkboxlsthobbies.ClearSelection();

        //Get the ID
        int id = Int32.Parse(GridView1.DataKeys[Int32.Parse(e.NewEditIndex.ToString())].Values["ID"].ToString());
        SqlCommand cmd = new SqlCommand("select * from CheckboxTable where ID = '"+id+"'", con);
        con.Open();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        con.Close();

        // Get the exact column and save it in a string.
        string str = dt.Rows[0]["Hobbies"].ToString();
        string[] strlist = str.Split(',').Select(t => t.Trim()).ToArray(); //Split into array and trim it.

        //Finally the main functionality to check the values in checkbox list.
        foreach (string s in strlist)
        {
            foreach (ListItem item in chkboxlsthobbies.Items)
            {
                if (item.Value == s)
                {
                    item.Selected = true;
                    break;
                }

            }


        }

谢谢。