2010-03-17 14 views
0

У меня есть код:GridView проверки дубликатов не с помощью SQL

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

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

Подробнее Код:

в .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> 

в 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; 

     } 


    } 
+0

В каком случае вы используете этот код? – atfergs

+0

Нажмите кнопку после добавления категории –

+0

Можем ли мы увидеть разметку ASPX для gvCategories? Если в левом столбце есть кнопка, вы получите это поведение. –

ответ

1

Поскольку у вас есть 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; 
    } 

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

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

txtFoo бы в контрольной группе [1] и txtBar бы в контрольной группе [3].

+0

ну, это ярлык на самом деле, который превращается в texbox, когда вы нажимаете EDIT. Итак, теперь я получаю ошибку кастинга: Невозможно наложить объект типа «System.Web.UI.WebControls.Label» на тип «System.Web.UI.WebControls.TextBox». –

+0

Try Label l = (Label) dr.Cells [0] .Controls [1]; вместо? –

+0

Это сработало! Благодаря ! получить очки;) –

Смежные вопросы