无法在GridView中检查CheckBox状态

时间:2013-03-09 11:38:08

标签: c# asp.net sql-server-2008

以下是我的代码......

protected void Button3_Click(object sender,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。我希望现在的背景更加清晰。

1 个答案:

答案 0 :(得分:0)

他们为什么要Checked==true?您正在fillGrid中创建它们,因为DataBind它是DataSource。因此,如果您发表评论Checked,则可能会fillgrid()

从aspx标记和Text的{​​{1}}我看到你想用它来插入(使用更好的ID)。然后我不知道你为什么要在插入任何内容之前重新加载数据源。只需将Buttton3移到最后(在插入后重新加载网格)。

fillgrid