在我的网络应用程序中,我有网格视图控件,编辑属性为true。现在我想在用户不在文本框中输入任何内容时使用验证,我不使用编辑模板我使用boundfields。我怎样才能使用验证帮助我谢谢你。 这是我的代码
<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>
答案 0 :(得分:3)
只需将gridview Itemtemplate中的验证器控件与要验证的控件一起添加即可。 请尝试以下示例:
<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 使用RequiredFieldValidator rfvComments 进行验证。
请检查。
已编辑:尝试在命令字段中添加ValidationGroup =“a”,并在requiredfieldvalidator中添加相同内容,如下所示:
<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>
答案 1 :(得分:2)
捕获GridView RowCommand事件,然后验证“更新”CommnadName上的所有输入
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
}
}
}
答案 2 :(得分:0)
首先获取一个文本框,然后将该值插入到会话中,然后将网格视图作为值赋予的参数。
答案 3 :(得分:0)
您可以扩展BoundField类以创建自己的类并向其添加验证器。
在新类中,您将覆盖InitializeDataCell方法并获取文本框(在编辑模式下将存在)。找到文本框后,您可以为其添加验证器。
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);
}