无法在GridView内检查复选框状态

本文关键字:检查 复选框 状态 GridView | 更新日期: 2023-09-27 18:03:01

以下是我的代码…

protected void Button3_Click(对象发送者,EventArgs e){fillgrid ();

        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            Label lblteachername = (Label)GridView1.Rows[i].FindControl("lblgridteachername");
            CheckBox status = (CheckBox)GridView1.Rows[i].FindControl("chkgridstatus");
            if (status.Checked == true)
            {    
                string q = "insert into teacher (status) values('"+dayList[i].Date+"') where schid='"+dayList[i].SchId+"'";    
            }                
        }
    }

问题是,if (status.Checked==true)总是返回false,无论我是否在girdview中勾选复选框。

public void fillgrid()
    {
        string q = "select * from teacher where teachername='" + drpteachername.SelectedItem.ToString() + "'  and ('2013-03-01' between date and todate) and '2013-03-31' between date and todate";
        dt = dbo.Getdt(q);
        //NOTE- if you bind gridview with dt, gridview will automatically generate no. of rows equal to the no. of rows returned to dt through the sql query from database.
        abc();
        DataTable dt1 = new DataTable();
        for (int i = 0; i < dayList.Count; i++)
        {
            DataRow dr = dt1.NewRow();
            dt1.Rows.Add(dr);
        }
        GridView1.DataSource = dt1;
        GridView1.DataBind();
        string teachername = drpteachername.SelectedItem.ToString();
        string month = drpmonth.SelectedItem.ToString();
        string strclass = drpclass1.SelectedItem.ToString();
        string section = drpsection1.SelectedItem.ToString();
        //string time=drpstarttime1.SelectedItem.ToString();
        for (int i = 0; i < dayList.Count; i++)
        {
            Label lbldate = (Label)GridView1.Rows[i].FindControl("lblgriddate");
            string fullstring = Convert.ToString(dayList[i].Date);
            lbldate.Text = fullstring.Substring(0, 9);
            //string q1 = "select starttime,endtime from teacher where teachername='"+drpteachername+"', and '"+fullstring+"' between date and todate";
            //dt = dbo.Getdt(q1);
            //int count=dt.Rows.Count;
            Label lblteachername = (Label)GridView1.Rows[i].FindControl("lblgridteachername");
            lblteachername.Text = teachername;
            Label lblclass = (Label)GridView1.Rows[i].FindControl("lblgridclass");
            lblclass.Text = dayList[i].Class;
            Label lblsection = (Label)GridView1.Rows[i].FindControl("lblgridsection");
            lblsection.Text = dayList[i].Section;
            Label lbltime = (Label)GridView1.Rows[i].FindControl("lblgridtime");
            lbltime.Text = dayList[i].StartTime.Substring(0, 5) + "-" + dayList[i].EndTime.Substring(0, 5);

        }
    }

ASPX:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
                        <Columns>
                            <asp:TemplateField HeaderText="TeacherName">
                                <ItemTemplate>
                                    <asp:Label ID="lblgridteachername" runat="server"></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Class">
                                <ItemTemplate>
                                    <asp:Label ID="lblgridclass" runat="server"></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Section">
                                <ItemTemplate>
                                    <asp:Label ID="lblgridsection" runat="server" Text="Label"></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Date">
                                <ItemTemplate>
                                    <asp:Label ID="lblgriddate" runat="server"></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Time">
                                <ItemTemplate>
                                    <asp:Label ID="lblgridtime" runat="server" Text="Label"></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Present">
                                <ItemTemplate>
                                    <asp:CheckBox ID="chkgridstatus" runat="server" />
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
    <br />
                    <asp:Button ID="Button3" runat="server" Text="Insert" onclick="Button3_Click" />
                </td>

abc()方法只是填充List。我希望现在上下文更清楚了。

无法在GridView内检查复选框状态

他们为什么要有Checked==true ?您正在fillGrid中创建它们,因为您将DataBind设置为DataSource。因此,如果你注释掉fillgrid(),它们可能是Checked

从aspx标记和Buttton3Text我看到你想用它来插入(使用更好的ID)。然后我不知道为什么你要在插入任何东西之前重新加载数据源。只需将fillgrid移动到最后(在插入后重新加载网格)。

protected void Button3_Click(object sender, EventArgs e) 
{ 
    //  fillgrid();   <-------------------- from here
    for (int i = 0; i < GridView1.Rows.Count; i++)
    {
        Label lblteachername = (Label)GridView1.Rows[i].FindControl("lblgridteachername");
        CheckBox status = (CheckBox)GridView1.Rows[i].FindControl("chkgridstatus");
        if (status.Checked == true)
        {    
            string q = "insert into teacher (status) values('"+dayList[i].Date+"') where schid='"+dayList[i].SchId+"'";    
        }                
    }
    fillgrid();    // <-------------------- to  here
}