C# 网格视图验证
在我的web应用程序中,我有一个网格视图控件,其编辑属性为true。现在我想在用户不在文本框中输入任何内容时使用验证,我不使用编辑模板,我使用边界字段。如何使用验证帮助我谢谢。 这是我的密码C# 网格视图验证,c#,asp.net,C#,Asp.net,在我的web应用程序中,我有一个网格视图控件,其编辑属性为true。现在我想在用户不在文本框中输入任何内容时使用验证,我不使用编辑模板,我使用边界字段。如何使用验证帮助我谢谢。 这是我的密码 <Columns> <asp:TemplateField HeaderText="Topic Id"> <ItemTemplate>
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
首先获取一个文本框,然后在该值之后插入会话,然后将网格视图作为值给定的参数。首先获取一个文本框,然后在该值之后插入会话,然后将网格视图作为值给定的参数。捕获GridView事件,然后验证上的所有输入“更新”CommnadName
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
void YourGridView_RowCommand(Object sender, GridViewCommandEventArgs e) {
if(e.CommandName == "Update") {
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = ContactsGridView.Rows[index];
if(!row.Cells[INDEX_OF_COLUMN_TO_VALIDATE].Text.StartsWith("SOME_LETTER")) {
//your error here
}
}
}
捕获GridView事件,然后验证“更新”CommnadName上的所有输入
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
void YourGridView_RowCommand(Object sender, GridViewCommandEventArgs e) {
if(e.CommandName == "Update") {
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = ContactsGridView.Rows[index];
if(!row.Cells[INDEX_OF_COLUMN_TO_VALIDATE].Text.StartsWith("SOME_LETTER")) {
//your error here
}
}
}
只需在gridview Itemtemplate中添加验证程序控件和要验证的控件。 请尝试以下示例:
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
<asp:GridView ID="GridView1" OnRowCommand="GridView1_RowCommand" runat="server">
<Columns>
<asp:TemplateField HeaderText="CategoryID">
<ItemTemplate>
<asp:LinkButton ID="lnkID" runat="server" CommandName="sel" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.CategoryID") %>'
Text='<%# DataBinder.Eval(Container,"DataItem.CategoryID") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Comments">
<ItemTemplate>
<asp:TextBox ID="txtComments" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvComments" runat="server" ControlToValidate="txtComments"
ValidationGroup="a" ErrorMessage="enter comments" Display="Dynamic"></asp:RequiredFieldValidator>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="CategoryName">
<ItemTemplate>
<asp:LinkButton ID="lnkName" runat="server" CommandName="sel" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.CategoryName") %>'
Text='<%# DataBinder.Eval(Container,"DataItem.CategoryName") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br/>
<asp:Button ID="btn" Text="Save" runat="server" ValidationGroup="a" />
文本框txtComments使用RequiredFieldValidatorRFV命令进行验证
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
请查收
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
已编辑:尝试在commandfield和requiredfieldvalidator中添加ValidationGroup=“a”,如下所示:
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
<asp:CommandField ValidationGroup="a" ButtonType="link" ShowEditButton="true" ShowCancelButton="true" />
<asp:TemplateField HeaderText="Comments">
<ItemTemplate>
<asp:Label ID="lblID" runat="server" Text='<%# DataBinder.Eval(Container,"DataItem.CategoryID") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtComments" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvComments" runat="server" ControlToValidate="txtComments"
ValidationGroup="a" ErrorMessage="you shouldn't leave the text box empty" Display="Dynamic"></asp:RequiredFieldValidator>
</EditItemTemplate>
</asp:TemplateField>
只需在gridview Itemtemplate中添加验证程序控件和要验证的控件。 请尝试以下示例:
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
<asp:GridView ID="GridView1" OnRowCommand="GridView1_RowCommand" runat="server">
<Columns>
<asp:TemplateField HeaderText="CategoryID">
<ItemTemplate>
<asp:LinkButton ID="lnkID" runat="server" CommandName="sel" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.CategoryID") %>'
Text='<%# DataBinder.Eval(Container,"DataItem.CategoryID") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Comments">
<ItemTemplate>
<asp:TextBox ID="txtComments" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvComments" runat="server" ControlToValidate="txtComments"
ValidationGroup="a" ErrorMessage="enter comments" Display="Dynamic"></asp:RequiredFieldValidator>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="CategoryName">
<ItemTemplate>
<asp:LinkButton ID="lnkName" runat="server" CommandName="sel" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.CategoryName") %>'
Text='<%# DataBinder.Eval(Container,"DataItem.CategoryName") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br/>
<asp:Button ID="btn" Text="Save" runat="server" ValidationGroup="a" />
文本框txtComments使用RequiredFieldValidatorRFV命令进行验证
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
请查收
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
已编辑:尝试在commandfield和requiredfieldvalidator中添加ValidationGroup=“a”,如下所示:
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
<asp:CommandField ValidationGroup="a" ButtonType="link" ShowEditButton="true" ShowCancelButton="true" />
<asp:TemplateField HeaderText="Comments">
<ItemTemplate>
<asp:Label ID="lblID" runat="server" Text='<%# DataBinder.Eval(Container,"DataItem.CategoryID") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtComments" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvComments" runat="server" ControlToValidate="txtComments"
ValidationGroup="a" ErrorMessage="you shouldn't leave the text box empty" Display="Dynamic"></asp:RequiredFieldValidator>
</EditItemTemplate>
</asp:TemplateField>
您可以扩展BoundField类来创建自己的类,并向其添加验证器
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
{
base.InitializeDataCell(cell, rowState);
// First, find the textbox to validate
TextBox textBox = null;
foreach (Control ctrl in cell.Controls)
{
if (ctrl is TextBox)
{
textBox = ctrl as TextBox;
}
break;
}
// If no textbox is found, this means we are not in edit mode.
if (null != textBox)
{
InitializeTextBox(cell, textBox);
}
}
private void InitializeTextBox(DataControlFieldCell cell, TextBox textBox)
{
// Force an Id if none exists.
if (string.IsNullOrEmpty(textBox.ID))
{
textBox.ID = "Text" + DataField;
}
// Add RequiredFieldValidator
var required = new RequiredFieldValidator {ControlToValidate = textBox.ID, Display = ValidatorDisplay.Dynamic, ErrorMessage = ErrorMsgRequired};
validators.Add(required);
cell.Controls.Add(required);
}
在新类中,您将重写InitializeDataCell方法并获取textbox(在编辑模式下将存在)。找到textbox后,您可以向其添加验证器
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
{
base.InitializeDataCell(cell, rowState);
// First, find the textbox to validate
TextBox textBox = null;
foreach (Control ctrl in cell.Controls)
{
if (ctrl is TextBox)
{
textBox = ctrl as TextBox;
}
break;
}
// If no textbox is found, this means we are not in edit mode.
if (null != textBox)
{
InitializeTextBox(cell, textBox);
}
}
private void InitializeTextBox(DataControlFieldCell cell, TextBox textBox)
{
// Force an Id if none exists.
if (string.IsNullOrEmpty(textBox.ID))
{
textBox.ID = "Text" + DataField;
}
// Add RequiredFieldValidator
var required = new RequiredFieldValidator {ControlToValidate = textBox.ID, Display = ValidatorDisplay.Dynamic, ErrorMessage = ErrorMsgRequired};
validators.Add(required);
cell.Controls.Add(required);
}
您可以扩展BoundField类来创建自己的类,并向其添加验证器
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
{
base.InitializeDataCell(cell, rowState);
// First, find the textbox to validate
TextBox textBox = null;
foreach (Control ctrl in cell.Controls)
{
if (ctrl is TextBox)
{
textBox = ctrl as TextBox;
}
break;
}
// If no textbox is found, this means we are not in edit mode.
if (null != textBox)
{
InitializeTextBox(cell, textBox);
}
}
private void InitializeTextBox(DataControlFieldCell cell, TextBox textBox)
{
// Force an Id if none exists.
if (string.IsNullOrEmpty(textBox.ID))
{
textBox.ID = "Text" + DataField;
}
// Add RequiredFieldValidator
var required = new RequiredFieldValidator {ControlToValidate = textBox.ID, Display = ValidatorDisplay.Dynamic, ErrorMessage = ErrorMsgRequired};
validators.Add(required);
cell.Controls.Add(required);
}
在新类中,您将重写InitializeDataCell方法并获取textbox(在编辑模式下将存在)。找到textbox后,您可以向其添加验证器
<Columns>
<asp:TemplateField HeaderText="Topic Id">
<ItemTemplate>
<asp:Label ID="lblsid" runat="server" Text='<%#Eval("subjectid") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="text2" />
</asp:TemplateField>
<asp:BoundField HeaderStyle-CssClass="text2" HeaderText="SubjectName" DataField="subjectname" />
</Columns>
</asp:GridView></td></tr>
protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
{
base.InitializeDataCell(cell, rowState);
// First, find the textbox to validate
TextBox textBox = null;
foreach (Control ctrl in cell.Controls)
{
if (ctrl is TextBox)
{
textBox = ctrl as TextBox;
}
break;
}
// If no textbox is found, this means we are not in edit mode.
if (null != textBox)
{
InitializeTextBox(cell, textBox);
}
}
private void InitializeTextBox(DataControlFieldCell cell, TextBox textBox)
{
// Force an Id if none exists.
if (string.IsNullOrEmpty(textBox.ID))
{
textBox.ID = "Text" + DataField;
}
// Add RequiredFieldValidator
var required = new RequiredFieldValidator {ControlToValidate = textBox.ID, Display = ValidatorDisplay.Dynamic, ErrorMessage = ErrorMsgRequired};
validators.Add(required);
cell.Controls.Add(required);
}
如何验证第一个字符应仅以字符开头如何在rowcommand@ZarembistyContactsGridview中实现这一点在我的页面中,它没有得到什么,没有该联系人的智能感知。ridview将其替换为GridView的ID,确定它正在工作,但是,我怀疑用户是否在te中没有任何东西xt框应该会出现这样一条消息:textbox不应该为空@zarembistyi刚刚添加了我的源代码请查看@zarembistyhow可以验证第一个字符应该仅以字符开头在rowcommand@ZarembistyContactsGridview中如何可能在我的页面中它没有得到该Conta的intellisenseCTSGridViews将其替换为GridView的ID,但我有点怀疑,如果用户在文本框中没有任何内容,它应该会出现这样一条消息:textbox不应该为空@zarembistyi刚刚添加了我的源代码请签出@zarembistyWhat你想验证什么?如果我不明白,请澄清。请查看何时编辑按钮单击,然后在编辑模式下显示文本框,当用户清除文本框(空)后,单击更新按钮,然后出现错误,如“您不应将文本框保留为空”“您想验证什么?如果我不明白,请澄清。请参阅当“编辑”按钮单击时,它将进入文本框编辑模式。当用户清除文本框(空)时,请单击“更新”按钮,然后出现错误,如“您不应该让文本框为空”为什么您不想使用编辑模板,我们可以知道吗?其他团队已经完成了此操作。现在我修改了这个,当然我更改了我现在放置的编辑模板的源代码,但是当我们使用boundfields时无法进行验证?我已经编辑了我的答案,并将用于验证文本框的示例代码放置在EditItemTemplate中。看看这个。为什么你不想使用编辑模板,我们可以知道吗?这已经由其他团队完成了。现在我得到这个修改,当然我改变了源代码,我放在编辑模板现在,但不可能到g