【问题标题】:Unable to check CheckBox state inside GridView无法检查 GridView 中的 CheckBox 状态
【发布时间】:2013-03-09 11:38:07
【问题描述】:

以下是我的代码...

protected void Button3_Click(object sender, EventArgs e) { 填充网格();

        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() 方法只是填充列表。我希望现在上下文更清楚了。

【问题讨论】:

  • 他们为什么要有Checked==true?我假设你是在fillGrid 中创建它们,因为你在那里DataBind。因此,当您注释掉 fillgrid()(取决于上下文)时,它们可能是 Checked
  • 我正在从 fillgrid() 填充这个 GridView。然后检查行。我是否需要在不使用 fillgrid() 的情况下单击按钮填充网格?
  • 我没有在页面加载时绑定。我已经发布了更多代码,请检查我的编辑。
  • @TimSchmelter 我想我知道我做错了什么。我稍后会回来。

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


【解决方案1】:

他们为什么要有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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多