Как я могу проверить статус флажка внутри gridview? - PullRequest
1 голос
/ 22 июня 2010

У меня есть сетка, и я сделал столбец шаблона с флажком внутри.Затем я хочу проверить значение флажков.Я пытаюсь установить для свойства видимой строки значение false, когда флажок этой строки не установлен.Я всегда получаю null, независимо от того, что я делаю.

Должно быть проблема с FindControl(), но я думаю, что это совершенно нормально:

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        DbInteract dbi = new DbInteract("CONNECTION STRING");
        GridView1.DataSource = dbi.SqlDA("select * from table");
        GridView1.DataBind();
    }
    protected void ProsseguirBtn_Click(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            foreach (GridViewRow row in GridView1.Rows)
            {
                CheckBox cb = (CheckBox)row.FindControl("chk");
                if (!cb.Checked)
                {
                    GridView1.Rows[row.RowIndex].Visible = false;
                }
            }
        }
    }
}

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
            <Columns>
                <asp:TemplateField>
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="chk" runat="server" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="nome" HeaderText="jhf" />
            </Columns>
        </asp:GridView>
        <asp:Button ID="ProsseguirBtn" runat="server" Text="Button" 
            onclick="ProsseguirBtn_Click" />

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

    </div>
    </form>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 22 июня 2010

Зачем вам нужен чек на !IsPostBack?

Я пробовал этот код без этой !IsPostBack проверки, и CheckBox найден правильно, в противном случае IsPostBack имеет значение false, и код для поиска CheckBox не будет активирован

0 голосов
/ 22 июня 2010

FindControl не является рекурсивным.Другими словами, когда вы вызываете FindControl для своей строки, он просматривает только те непосредственные элементы управления, которые содержит строка.

GridViewRow напрямую не содержит ваши элементы управления - он содержит ячейки таблицы, которые затем содержат ваши элементы управления,Поэтому FindControl не найдет ваш флажок.

Вам нужно будет использовать другой метод, например цикл foreach для ячеек таблицы, если вы не знаете нужный столбец, или напишите рекурсивную версиюFindControl.Вы можете найти версию, которую я иногда использую, в моем старом ответе здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...