C# gridview不使用sql检查重复项
我有一个密码:C# gridview不使用sql检查重复项,c#,asp.net,gridview,foreach,duplicates,C#,Asp.net,Gridview,Foreach,Duplicates,我有一个密码: foreach (GridViewRow dr in gvCategories.Rows)<br/> { <br/> if (dr.Cells[0].Text == txtEnterCategory.Text.Trim())<br/> <br/> isError=true; <br/> <br/> } 在ascx.cs中: 由于在最左边的列中有一个包含标签的Tem
foreach (GridViewRow dr in gvCategories.Rows)<br/>
{
<br/>
if (dr.Cells[0].Text == txtEnterCategory.Text.Trim())<br/>
<br/>
isError=true;
<br/>
<br/>
}
在ascx.cs中:
由于在最左边的列中有一个包含标签的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],但它是。TemplateField的ItemTemplate中的每个控件似乎都创建了一对控件,因此,例如,如果您有:
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="txtFoo" runat="server" />
<asp:TextBox ID="txtBar" runat="server" />
</ItemTemplate>
</asp:TemplateField>
txtFoo将位于控件[1],txtBar将位于控件[3]。在什么事件上运行该代码?添加类别后单击按钮可以看到gvCategories的ASPX标记?如果在最左边的列中有一个按钮,你会看到这种行为。我实际上希望看到标签的内容。实际上,它是标签,当你点击编辑时,它会变成texbox。因此,现在出现强制转换错误:无法将类型为“System.Web.UI.WebControls.Label”的对象强制转换为类型为“System.Web.UI.WebControls.TextBox”。请尝试标签l=(Label)dr.Cells[0]。控件[1];相反?太好了,我很高兴它成功了:)我将编辑答案,以反映这样一个事实,即您在那里有一个标签,而不是一个文本框。
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;
}
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="txtFoo" runat="server" />
<asp:TextBox ID="txtBar" runat="server" />
</ItemTemplate>
</asp:TemplateField>