c# - Formview:当用户尝试插入数据时检查记录是否存在 ASP.NET C#

标签 c# asp.net formview

如果在用户单击插入链接按钮后数据库中存在一条记录,有没有办法生成一个消息框?如果不进行插入,我希望 formview 检查记录是否存在。

帮助将不胜感激。 提前致谢:)

这是我的代码示例:

管理图书

添加/删除书籍

注意:对于书籍 ID/ISBN,请引用 ISBN 中的条形码,通常位于 在书的后面。需要条形码阅读器。

    <EditItemTemplate>

        Book ID/ISBN:
        <asp:Label ID="bookidLabel1" runat="server" Text='<%# Eval("bookid") %>' />
        <br />

        Title:
        <asp:TextBox ID="booktitleTextBox" runat="server" 
            Text='<%# Bind("booktitle") %>' />
        <br />

        Author's lastname:
        <asp:TextBox ID="lastnameTextBox" runat="server" 
            Text='<%# Bind("lastname") %>' />
        <br />

        Author's firstname:
        <asp:TextBox ID="firstnameTextBox" runat="server" 
            Text='<%# Bind("firstname") %>' />
        <br />

        Description:
        <asp:TextBox ID="descriptionTextBox" runat="server" 
            Text='<%# Bind("description") %>' />
        <br />

        Category:
        <asp:TextBox ID="categoryidTextBox" runat="server" 
            Text='<%# Bind("categoryid") %>' />
        <br />

        Date added:
        <asp:TextBox ID="dateaddedTextBox" runat="server" 
            Text='<%# Bind("dateadded") %>' />
        <br />

        Status:
        <asp:TextBox ID="statusidTextBox" runat="server" 
            Text='<%# Bind("statusid") %>' />
        <br />

        Quantity:
        <asp:TextBox ID="quantityTextBox" runat="server" 
            Text='<%# Bind("quantity") %>' />
        <br />

        name:
        <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("name") %>' />
        <br />
        <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" 
            CommandName="Update" Text="Update" />
        &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" 
            CausesValidation="False" CommandName="Cancel" Text="Cancel" />

    </EditItemTemplate>

    <InsertItemTemplate>

        Book ID:
        <asp:TextBox ID="bookidTextBox" runat="server" Text='<%# Bind("bookid") %>' />
        <asp:RequiredFieldValidator ID="RequesFieldValidator1" runat="server" ErrorMessage="* Required" ControlToValidate="bookidTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ID="RegularExpressionValidator" runat="server" Display="Dynamic" ControlToValidate="bookidTextBox" ValidationExpression="^([\S\s]{13,13})$" ErrorMessage="Invalid ID/ISBN. Please try again" ValidationGroup="InsertBook">
        </asp:RegularExpressionValidator>
        <br />

        Title:
        <asp:TextBox ID="booktitleTextBox" runat="server" 
            Text='<%# Bind("booktitle") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="* Required" ControlToValidate="booktitleTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <br />

        Author's lastname:
        <asp:TextBox ID="lastnameTextBox" runat="server" 
            Text='<%# Bind("lastname") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="* Required" ControlToValidate="lastnameTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <br />

        Author's firstname:
        <asp:TextBox ID="firstnameTextBox" runat="server" 
            Text='<%# Bind("firstname") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ErrorMessage="* Required" ControlToValidate="firstnameTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <br />

        Description:
        <asp:TextBox ID="descriptionTextBox" runat="server" 
            Text='<%# Bind("description") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ErrorMessage="* Required" ControlToValidate="descriptionTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <br />

        Category:
        <asp:DropDownList ID="DropDownList1" runat="server" 
            DataSourceID="categoryDataSource" DataTextField="name" 
            DataValueField="categoryid" SelectedValue='<%# Bind("categoryid", "{0}") %>'>
        </asp:DropDownList>

        <asp:SqlDataSource ID="categoryDataSource" runat="server" 
            ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
            SelectCommand="SELECT [categoryid], [name] FROM [TblCategory]">
        </asp:SqlDataSource>
        <br />

        Date added:
        <asp:TextBox ID="dateaddedTextBox" runat="server" 
            Text='<%# Bind("dateadded") %>'/>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator6" runat="server" ErrorMessage="* Required" ControlToValidate="dateaddedTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <%--<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
        ControlToValidate="dateaddedTextBox" ErrorMessage="RegularExpressionValidator"
        ValidationExpression="(19|20)\d\d(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])">
        </asp:RegularExpressionValidator>--%>
        <br />

        Status:
        <asp:DropDownList ID="DropDownList2" runat="server" 
            DataSourceID="statusDataSource" DataTextField="statusname" 
            DataValueField="statusid" SelectedValue='<%# Bind("statusid", "{0}") %>'>
        </asp:DropDownList>

        <asp:SqlDataSource ID="statusDataSource" runat="server" 
            ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
            SelectCommand="SELECT [statusid], [statusname] FROM [BookStatus]">
        </asp:SqlDataSource>
        <br />

        Quantity:
        <asp:TextBox ID="quantityTextBox" runat="server" 
            Text='<%# Bind("quantity") %>' />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" ErrorMessage="* Required" ControlToValidate="quantityTextBox" ValidationGroup="InsertBook">
        </asp:RequiredFieldValidator>
        <br />

        <asp:Button ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" Text="Add" ValidationGroup="InsertBook"/>

        <asp:Button ID="InsertCancelButton" runat="server" 
            CausesValidation="False" CommandName="Cancel" Text="Cancel" />

    </InsertItemTemplate>

    <ItemTemplate>
        <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" 
            CommandName="New" Text="New" />
    </ItemTemplate>
    <EmptyDataTemplate>
        <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" 
            CommandName="New" Text="New" />
    </EmptyDataTemplate>
    <HeaderTemplate>
        Add a new book
    </HeaderTemplate>

</asp:FormView>

最佳答案

您可以 checkin ItemInserting方法。

类似于:

void FormViewName_ItemInserting(object sender, FormViewInsertEventArgs e)
{
  string somevalue = e.Values["somefieldtoget"];
  //make your calls to the DB to check the somevalue doesn't exist 

  if(exists)
    e.Cancel = true; 
}

您也可以在数据源上执行此操作 Inserting方法(假设为 sql 数据源)......

void datasourcename_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
...
}

@steve-wellens 提到的另一种方法是,如果您有一个基于表单 View 中的一个或多个字段的主键(不是自动生成的数字,那么下面将非常适合捕捉插入尝试重复的键/记录。

void FormViewName_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
  if (e.Exception != null)
  {
   if (((SqlException)e.Exception).Number == 2627)
   {
    e.ExceptionHandled = true;
    e.KeepInInsertMode = true;
    // Display error message.
   }
  }
}

关于c# - Formview:当用户尝试插入数据时检查记录是否存在 ASP.NET C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5918783/

相关文章:

c# - 为什么接口(interface) IOrderedEnumerable<T> 在 T 中不是协变的?

c# - 当放置在 FormView 控件中时设置 asp .net Rating 控件值

c# - Server.MapPath 和 HostingEnvironment.MapPath 有什么区别?

ios - 在 ASP.Net 和 iPad 以及 IIS 的 Windows 集成身份验证中使用输入类型 ="file"

c# - 在使用 formview 保存/插入数据源之前修剪文本框中值的最佳方法

python - 返回到将您带到那里的页面 Django

C# WinForms 隐藏加密 key

c# - 将返回内核实例的 lambda 传递给 Ninject Web.Common UseNinjectMiddleware 是否可以?

c# - 在 WinRT 中使用 MVVM Light Toolkit 填充文本框的进度条

asp.net - 重定向到带有 true VS CompleteRequest 和安全线程的 endResponse 的页面