Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 检查数据库表中的值,以查看新记录是否与现有记录冲突_Asp.net_C# 4.0_Insert_Validation_Detailsview - Fatal编程技术网

Asp.net 检查数据库表中的值,以查看新记录是否与现有记录冲突

Asp.net 检查数据库表中的值,以查看新记录是否与现有记录冲突,asp.net,c#-4.0,insert,validation,detailsview,Asp.net,C# 4.0,Insert,Validation,Detailsview,我有一个包含多个字段的Detailsview,始终设置为插入模式。在用户插入新记录之前,我想检查这些字段,以查看该用户是否已经输入了该日期的记录 我真的需要找到一种方法来检查多个需求,比如请求的日期是否是假日,或者是否已经有两个不同的用户对同一日期发出了不同的请求,因为请求同一日期的人不能超过两个 我无法让自定义验证器工作,因为我只有在按下insert时才能回发 我想知道,当按下insert时,是否有任何方法可以检查不同的验证,但只有在insert全部通过时才能执行 我需要检查表中的多个列。用户

我有一个包含多个字段的Detailsview,始终设置为插入模式。在用户插入新记录之前,我想检查这些字段,以查看该用户是否已经输入了该日期的记录

我真的需要找到一种方法来检查多个需求,比如请求的日期是否是假日,或者是否已经有两个不同的用户对同一日期发出了不同的请求,因为请求同一日期的人不能超过两个

我无法让自定义验证器工作,因为我只有在按下insert时才能回发

我想知道,当按下insert时,是否有任何方法可以检查不同的验证,但只有在insert全部通过时才能执行

我需要检查表中的多个列。用户ID和日期

我希望这是有道理的

asp:DetailsView ID=DetailsView w1 runat=server DataSourceID=ObjectDataSource1 DataKeyNames=bwrequestid 高度=29px宽度=928px自动生成器WS=False CellPadding=4前景色=333 网格线=无样式=右边距:0px;文本对齐:左对齐;边际上限:0px; ondatabound=DetailsView1_数据绑定oniteminserting=EntValid_项目插入

        protected void EntValid_ItemInserting(object sender, DetailsViewInsertEventArgs e)
    {
        for (int i = 0; i < e.Values.Count; i++)
        {
            if (e.Values[i] != GetData())
            {
                e.Cancel = true;

                return;
            }
        }
    }
        protected void EntValid_ItemInserting(object sender, DetailsViewInsertEventArgs e)
    {
        for (int i = 0; i < e.Values.Count; i++)
        {
            if (e.Values[i] != GetData())
            {
                e.Cancel = true;

                return;
            }
        }
    }

} 我假设您只使用服务器端验证,对吗?如果是这样的话,我建议同时进行服务器和客户端验证,但这与您需要首先处理Details视图的ItemInserting事件无关

在这一点上,您将拥有对该记录的完全访问权限。有关更多详细信息,请参阅

在ItemInserting事件处理程序中,进行验证,如果验证失败,则使用e.Cancel=true

例:

别忘了连接这个处理器:

<asp:DetailsView ID="CustomerDetail" 
    DataSourceID="Details" AutoGenerateRows="false"
    *other properties*
    OnItemInserting="CustomerDetail_ItemInserting" >

尝试一些代码,让我们知道你在哪里被击中。如果一切都是数据驱动的,则需要在插入之前从数据库中获取假期和其他条件的列表。验证它们中的每一个,然后让你的插件听起来像是你在尝试从前端开始做任何事情。您应该在提交时触发的codebehind中创建一个函数。将信息传递到函数中,然后从函数内部执行所需的任何/所有验证。返回类型可以是bool。因此,在提交事件中,您可以调用ifmyValidatefunctiontheData{submitTheFormHere}else{showMessageAndStartOver}之类的函数。我想我遇到的更多问题是,由于用户必须按insert来执行代码,所以验证器没有验证任何内容。我编辑了代码以显示我尝试的一些验证。谢谢,我使用了代码隐藏,但没有正确调用数据库来检查我需要检查的值。此外,我没有使用项目插入。我现在就试试这个方法。只是好奇,你是不是接受了,然后又不接受这个答案?如果是,原因是什么?答案不言而喻。我从来没有接受过。这就是为什么我没有检查它,因为我自己从来没有检查它作为正确的答案。我确实试过你说的话,但它似乎对验证器没有影响。当你说它似乎对验证器没有影响时,你是在暗示你正在试图一起阻止回发吗?与中一样,您希望验证程序触发并阻止访问服务器?因为如果是这样,那么请确保ItemInserting事件不是正确的方式。如果您不关心它返回到服务器,只要它在验证时没有插入,那么ItemInserting实际上就是这样。到底是什么不起作用?你能发布你试图实现的代码吗?aspx部分和后端请。我编辑了我的帖子来显示代码。我正在尝试与服务器通信,以检查记录是否已经存在,然后才能提交。现在发生的事情是,它刚刚提交。
        var sql = "SELECT LEAVETYPE, LEAVECODE FROM TEST.LVTYPE ORDER BY LEAVECODE";

        using (iDB2Connection conn = new iDB2Connection(GetConnectionString()))
        {
            conn.Open();

            using (iDB2Command cmd = new iDB2Command(sql, conn))
            {
                cmd.DeriveParameters();

                using (iDB2DataAdapter da = new iDB2DataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    da.Fill(ds);

                    return ds;
                }
            }
        }
void CustomerDetail_ItemInserting(object sender, 
    DetailsViewInsertEventArgs e)
{
    for (int i = 0; i < e.Values.Count; i++)
    {
        if (e.Values[i] != *your validation here*)
        {
            e.Cancel = true;

            //set your validation summary message here
            ...

            return;
        }
    }
}
<asp:DetailsView ID="CustomerDetail" 
    DataSourceID="Details" AutoGenerateRows="false"
    *other properties*
    OnItemInserting="CustomerDetail_ItemInserting" >