【发布时间】:2012-09-19 08:26:42
【问题描述】:
我有一个包含多个字段的详细信息视图,始终设置为插入模式。在这些字段中,我想在用户插入新记录之前检查该用户是否已经输入了该日期的记录。
我真的需要想办法检查多个需求,比如请求的日期是否是假期,或者是否已经有两个不同用户在同一日期发出了两个不同的请求(因为请求的人不能超过两个同一天。)
我无法让自定义验证器工作,因为我唯一一次回发是在按下插入时。
我想知道是否有任何方法可以在按下插入时检查不同的验证,但只有在全部通过时才执行插入?
我需要检查表格中的多个列。用户 ID 和日期。
我希望这是有道理的。
asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="ObjectDataSource1" DataKeyNames="bwrequestid" 高度="29px" 宽度="928px" AutoGenerateRows="False" CellPadding="4" ForeColor="#333333" GridLines="None" Style="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;
}
}
}
}
【问题讨论】:
-
尝试一些代码,让我们知道你在哪里受到打击。如果一切都是数据驱动的,您需要在插入之前从数据库中获取假期和其他条件的列表。验证它们中的每一个,然后插入
-
听起来你正在尝试从前端做所有事情。您应该在提交时触发的代码隐藏中创建一个函数。将信息传递到函数中,然后从函数内部进行所需的任何/所有验证。返回类型可以是
bool。因此,在您的提交事件中,您可以调用类似if(myValidatefunction(theData)) { submitTheFormHere } else { showMessageAndStartOver } -
我想我遇到的更多问题是验证器没有验证任何东西,因为用户必须点击插入才能执行代码。我编辑了我的代码以显示我尝试过的一些验证。
标签: asp.net c#-4.0 insert validation detailsview