ASP.Net C# 网格视图复选框查询

本文关键字:复选框 查询 视图 网格 Net ASP | 更新日期: 2023-09-27 17:55:12

我正在使用 asp.net 和c#创建一个Web应用程序。我正在使用网格视图显示数据库中的员工列表。我添加了一个复选框,以便用户可以选择他们想要选择的员工。但是,当我去检查用户单击的位置时,所有复选框都显示为未单击。这是我的代码:

    <asp:GridView runat="server" id="gvPickStaff" GridLines="Horizontal" AutoGenerateColumns="false">
                    <Columns>
                        <asp:BoundField DataField="idusers" HeaderText="ID  " ReadOnly="true" />
                        <asp:BoundField DataField="first_name" HeaderText="Name " ReadOnly="true" />
                        <asp:BoundField DataField="job_title" HeaderText="Job Title     " ReadOnly="true" />
                        <asp:BoundField DataField="code_quality" HeaderText="Code Quality" ReadOnly="true" />
                        <asp:BoundField DataField="time_bonus" HeaderText="Time Bonus" ReadOnly="true" />
                        <asp:BoundField DataField="analysis_of_requirements" HeaderText="Analysis Of Requierements" ReadOnly="true" />
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:CheckBox ID="cbxSelect" runat="server" Checked="true" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

我发现问题的代码隐藏:

    protected void btnAddStaff_OnClick(object sender, EventArgs e)
    {
        foreach(GridViewRow rowitem in gvPickStaff.Rows)
        {
            chk = (CheckBox)(rowitem.Cells[0].FindControl("cbxSelect"));
            if(chk.Checked)
            {
                int staffid = Convert.ToInt32(gvPickStaff.DataKeys[rowitem.RowIndex]["idusers"]);
                staffChosen.Add(staffid);
            }
        }
    }

我像这样填充网格视图:

    protected void fillStaffChoiceList()
    {
        string strConnection = ConfigurationSettings.AppSettings["ConnectionString"];
        MySqlConnection connection = new MySqlConnection(strConnection);
        MySqlCommand command = connection.CreateCommand();
        MySqlDataReader reader;
        command.CommandText = "SELECT idusers, first_name, job_title, code_quality, time_bonus,analysis_of_requirements FROM `test`.`users` WHERE security_level > 1";
        //SELECT idusers, first_name, last_name, job_title, code_quality, time_bonus,analysis_of_requirements FROM `test`.`users` WHERE security_level > 1;
        connection.Open();
        reader = command.ExecuteReader();
        gvPickStaff.DataSource = reader;
        gvPickStaff.DataBind();
        connection.Close();
    }

谁能看出我哪里出了问题?

ASP.Net C# 网格视图复选框查询

我认为问题出在页面加载上

试试这个

public void Page_Load(object sender,EventArgs e)
{
if(!IsPostBack)
{
fillStaffChoiceList();
}
}
(rowitem.Cells[6].FindControl("cbxSelect")`

我猜您在错误的单元格中查找复选框。你没有在复选框上得到一个解释吗?它不应在单元格 0 中可用。

这是可以使用的示例。

(复选框)gvPickStaff.Rows[i].FindControl("cbxSelect")).检查

我希望这也可以帮助它明确地进入复选框,从而能够按预期返回。

在复选框中使用以下命令:

<input type="checkbox" name="chk1" id="chk1" value='<%# Eval("idusers") %>' />

当您想要选择的 id 时,请使用:

request("chk1");

它将返回所有用逗号(,)分隔检查的数据