дублирование проверки gridview, не используя sql - PullRequest
0 голосов
/ 17 марта 2010

У меня есть код:

foreach (GridViewRow dr in gvCategories.Rows)<br/>
{  
   <br/>
   if (dr.Cells[0].Text == txtEnterCategory.Text.Trim())<br/>
   <br/>
    isError=true;
   <br/>
   <br/> 
}

Отладка: dr.Cells[0].Text всегда "", даже если есть записи. Как использовать цикл для проверки каждой строки, чтобы найти, существует ли запись в сетке, не использующая sql?

Дополнительный код:

in .ascx :

<Columns>
    <asp:TemplateField HeaderText="Category Name" SortExpression="Category">
    <ItemTemplate>
        <asp:Label ID="txtCategoryEdit" runat="server" Text='<%# Bind("CategoryName") %>' OnTextChanged="TextBox_TextChanged"></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
<asp:TextBox ID="txtCategoryEdit" runat="server" Text='<%# Bind("CategoryName") %>' OnTextChanged="TextBox_TextChanged"></asp:TextBox>
    </EditItemTemplate>

</asp:TemplateField>
<asp:TemplateField HeaderText="In Footer?" SortExpression="ShowInFooter">
    <ItemTemplate>
        <asp:Label ID="lblShowInFooter" runat="server" 
            Text='<%# (bool)Eval("ShowInFooter") ? "Yes" : "No" %>'></asp:Label>
    </ItemTemplate>
  <EditItemTemplate>
    <asp:CheckBox ID="lblShowInFooter" runat="server"
      Checked='<%# (bool)Eval("ShowInFooter")%>'>
    </asp:CheckBox>

  </EditItemTemplate>

</asp:TemplateField>


 <asp:CommandField ShowCancelButton="true" ShowDeleteButton="true" ShowEditButton="true" CausesValidation="false" ItemStyle-CssClass="commandfield" />
</Columns>

in ascx.cs :

bool isError = false;

foreach (GridViewRow dr in gvCategories.Rows)
    {
        if (dr.Cells[0].Text == txtEnterCategory.Text.Trim())
        {
            lblErrorMessage.Text = "This category already exits. Please enter a new category!";
            lblErrorMessage.Visible = true;

            isError=true;

        }


    }

1 Ответ

1 голос
/ 19 марта 2010

Поскольку у вас есть TemplateField, содержащий метку в крайнем левом столбце, а не BoundField, вы получаете значение следующим образом:

foreach (GridViewRow dr in gvCategories.Rows)
{
    Label l = (Label)dr.Cells[0].Controls[1];

    if (l.Text.Trim() == txtEnterCategory.Text.Trim())
    {
        lblErrorMessage.Text = "This category already exits. Please enter a new category!";
        lblErrorMessage.Visible = true;

        isError=true;
    }

Не спрашивайте меня, почему это Controls [1], но это так. Кажется, что каждый элемент управления в ItemTemplate TemplateField создает пару элементов управления, например, если у вас было это:

<asp:TemplateField>
    <ItemTemplate>
        <asp:TextBox ID="txtFoo" runat="server" />
        <asp:TextBox ID="txtBar" runat="server" />
    </ItemTemplate>
</asp:TemplateField>

txtFoo будет в Controls [1], а txtBar будет в Controls [3].

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