网格视图验证

时间:2009-11-02 04:01:58

标签: c# asp.net

在我的网络应用程序中,我有网格视图控件,编辑属性为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>

4 个答案:

答案 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);
        }