如何在Asp.net Gridview列中为复选框单击添加事件

6
我有一个包含复选框列的 ASP 中的网格视图,现在我想选择这一列并获取行的 ID 值。但是我不知道该如何实现。
以下是我的 Aspx 代码:
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"
                    AutoGenerateColumns="False" BackColor="LightGoldenrodYellow" 
                    BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" 
                    GridLines="None">
                    <AlternatingRowStyle BackColor="PaleGoldenrod" />
                    <Columns>
                     <asp:TemplateField>
                            <HeaderTemplate>
                                <asp:CheckBox ID="chkhdr" runat="server" />
                            </HeaderTemplate>
                          <ItemTemplate>
                                <asp:CheckBox ID="chkChild" runat="server" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Username">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("col0") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Role(Admin)">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkAdmin" runat="server" Checked='<%# Eval("col1") %>' />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Role(User)">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkUser" runat="server" Checked='<%# Eval("col2") %>' />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Role(GeneralUser)">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkgen" runat="server" Checked='<%# Eval("col3") %>' />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

这是我的代码后台文件...


protected void BindGridviewData()
{

    var role = from MembershipUser u in Membership.GetAllUsers()
                select new
                {
                    User = u.UserName,
                    Role = string.Join(",", Roles.GetRolesForUser(u.UserName))
                };

    DataTable dTable = new DataTable();
    dTable.Columns.Add("col0", typeof(string));
    dTable.Columns.Add("col1", typeof(bool));
    dTable.Columns.Add("col2", typeof(bool));
    dTable.Columns.Add("col3", typeof(bool));
    foreach (MembershipUser u in Membership.GetAllUsers())
    {
        DataRow dRow = dTable.NewRow();
        dRow[0] = u.UserName;

        string[] roles = Roles.GetRolesForUser(u.UserName);
        dRow[1] = roles.Contains("Admin") ? true : false;
        dRow[2] = roles.Contains("DPAO User") ? true : false;
        dRow[3] = roles.Contains("GeneralUser") ? true : false;
        dTable.Rows.Add(dRow);
    }
    GridView1.DataSource = dTable;
    GridView1.DataBind();
}

大家好,请帮忙,我不知道如何完成这个任务...先谢谢了。


我上个月做了类似的事情,但是我使用了Telerik RadGridView,它提供了_SelectedItem_属性。我不知道这个属性在asp grid里是否可用。如果可用的话,只需添加SelectedItem="{Binding id, Mode=TwoWay}" - Nadeem_MK
5个回答

7

尝试这个:

<asp:TemplateField HeaderText="View">
   <ItemTemplate>
      <asp:CheckBox ID="chkview" runat="server" AutoPostBack="true" OnCheckedChanged="chkview_CheckedChanged" />
   </ItemTemplate>
</asp:TemplateField>

在aspx.cs页面中添加复选框更改事件。
protected void chkview_CheckedChanged(object sender, EventArgs e)
{
    GridViewRow row = ((GridViewRow)((CheckBox)sender).NamingContainer);
    int index = row.RowIndex;
    CheckBox cb1 = (CheckBox)Gridview.Rows[index].FindControl("chkview");
    string yourvalue = cb1.Text;
    //here you can find your control and get value(Id).

}

2
如果您想通过按钮删除记录,请尝试以下操作:
在GridView外部添加一个按钮以进行删除:
<asp:Button ID="cmdDelete" runat="server" onclick="cmdDelete_Click" Text="Delete" />

代码后端:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindGridviewData();
    }
}
protected void BindGridviewData()
{
    DataTable dTable = new DataTable();
    dTable.Columns.Add("col0", typeof(string));
    dTable.Columns.Add("col1", typeof(bool));
    dTable.Columns.Add("col2", typeof(bool));
    dTable.Columns.Add("col3", typeof(bool));
    foreach (MembershipUser u in Membership.GetAllUsers())
    {
        DataRow dRow = dTable.NewRow();
        dRow[0] = u.UserName;
        string[] roles = Roles.GetRolesForUser(u.UserName);
        dRow[1] = roles.Contains("Admin") ? true : false;
        dRow[2] = roles.Contains("DPAO User") ? true : false;
        dRow[3] = roles.Contains("GeneralUser") ? true : false;
        dTable.Rows.Add(dRow);
    }
    GridView1.DataSource = dTable;
    GridView1.DataBind();
}
protected void cmdDelete_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView1.Rows)
    {
        CheckBox chk = (CheckBox)row.FindControl("chkChild");
        if (chk.Checked)
        {
            Label username = (Label)row.FindControl("Label1");
            Membership.DeleteUser(username.Text);
            BindGridviewData();
        }
    }
}

1
使用 OnCheckedChanged 事件。
<ItemTemplate>
  <asp:CheckBox ID="chkgen" runat="server" Checked='<%# Eval("col3") %>'  
        OnCheckedChanged="chkgen_OnCheckedChanged"/>
</ItemTemplate>

CS:

protected void chkgen_OnCheckedChanged(object sender, EventArgs e)
{
      int selRowIndex = ((GridViewRow)(((CheckBox)sender).Parent.Parent)).RowIndex;
      CheckBox cb = (CheckBox)gridView.Rows[selRowIndex].FindControl("chkgen");

      if (cb.Checked)
      {
             //Perform your logic
      }
}

0
 protected void GetFillDropdown()
    {
        string consString = ConfigurationManager.ConnectionStrings["SheetalAcademy"].ConnectionString;
        SqlConnection conn = new SqlConnection(consString);

        int EID = Convert.ToInt32(Session["EmailID"].ToString());
        SqlCommand cmd = new SqlCommand("Select id,Course_Name from tbl_Courses where EID='" + EID + "' and Active='True'", conn);
        conn.Open();
        ddCourseType.Items.Clear();
        ddCourseType.Items.Add("All");
        ddCourseType.AppendDataBoundItems = true;
        ddCourseType.DataSource = cmd.ExecuteReader();
        ddCourseType.DataTextField = "Course_Name";
        ddCourseType.DataValueField = "id";
        ddCourseType.DataBind();
        conn.Close();

    }

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接