我有一个包含多个字段的Detailsview,始终设置为插入模式 . 我想在用户插入新记录之前检查这些字段,以查看该用户是否已输入该日期的记录 .
我真的需要找到一种方法来检查多个要求,例如,如果请求的日期是假日,或者在同一日期已经有两个不同用户提出的不同请求(因为请求同一日期的人不能超过两个) . )
我无法使自定义验证器工作,因为我回拨的唯一时间是按下插入时 .
我想知道在按下插入时是否有任何方法可以检查不同的验证,但是如果全部通过则只能跟随插入?
我需要检查表中的多个列 . 用户标识和日期 .
我希望这是有道理的 .
asp:DetailsView ID =“DetailsView1”runat =“server”DataSourceID =“ObjectDataSource1”DataKeyNames =“bwrequestid”Height =“29px”Width =“928px”AutoGenerateRows =“False”CellPadding =“4”ForeColor =“#333333”GridLines =“无”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;
}
}
}
-------获取数据看起来像这样
private DataSet GetData(){ConnectionStringSettingsCollection cssc = 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;
}
}
}
-------获取数据看起来像这样
private DataSet GetData(){ConnectionStringSettingsCollection cssc = 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;
}
}
}
1 回答
我假设你只使用服务器端验证这是正确的吗?如果是这样(我建议服务器和客户端验证,但这不是重点)你需要的是首先处理Details视图的ItemInserting事件 .
此时,您将拥有对记录的完全访问权限 . 有关详细信息,请参阅MSDN .
在ItemInserting事件处理程序中,进行验证,如果失败,请使用e.Cancel = true;
例如:
只是不要忘记挂钩这个处理程序: