C# 网格视图验证

C# 网格视图验证,c#,asp.net,C#,Asp.net,在我的web应用程序中,我有一个网格视图控件,其编辑属性为true。现在我想在用户不在文本框中输入任何内容时使用验证,我不使用编辑模板,我使用边界字段。如何使用验证帮助我谢谢。 这是我的密码 <Columns> <asp:TemplateField HeaderText="Topic Id"> <ItemTemplate>

在我的web应用程序中,我有一个网格视图控件,其编辑属性为true。现在我想在用户不在文本框中输入任何内容时使用验证,我不使用编辑模板,我使用边界字段。如何使用验证帮助我谢谢。 这是我的密码

                    <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