1

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

我真的需要想办法检查多个要求,例如请求的日期是否是假期,或者是否已经有两个不同用户在同一日期发出了两个不同的请求(因为请求同一日期的人不能超过两个.)

我无法让自定义验证器工作,因为我唯一的回发时间是按下插入时。

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

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

我希望这是有道理的。

asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="ObjectDataSource1" DataKeyNames="bwrequestid" Height="29px" Width="928px" AutoGenerateRows="False" CellPadding="4" ForeColor="#333333" GridLines ="无" 样式="margin-right: 0px; text-align: left; margin-top: 0px;" ondatabound="DetailsView1_DataBound" oniteminserting="EntValid_ItemInserting"

        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;
            }
        }
    }

--------获取数据是这样的

私有数据集 GetData() { ConnectionStringSettingsCollection csc = ConfigurationManager.ConnectionStrings;

        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;
                }
            }
        }
    }

        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;
            }
        }
    }

--------获取数据是这样的

私有数据集 GetData() { ConnectionStringSettingsCollection csc = ConfigurationManager.ConnectionStrings;

        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;
                }
            }
        }

}

4

1 回答 1

0

我假设您只使用服务器端验证这是正确的吗?如果是这样(顺便说一句,我建议同时进行服务器和客户端验证,但这无关紧要)您首先需要处理 Details 视图的 ItemInserting 事件。

届时,您将拥有对该记录的完全访问权限。有关详细信息, 请参阅MSDN 。

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

前任:

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" >
于 2012-09-27T14:34:13.853 回答