我有一个包含多个字段的Detailsview,始终设置为插入模式。我想在用户插入新记录之前检查这些字段,以查看该用户是否已输入该日期的记录。
我真的需要找到一种方法来检查多个要求,例如请求的日期是假日,还是已经有两个不同用户在同一日期发出的不同请求(因为请求的人数不能超过两个)同一天。)
我无法使用自定义验证器,因为我回拨的唯一时间是按下插入时。
我想知道在按下插入时是否有任何方法可以检查不同的验证,但是如果全部通过则只能使用插入操作?
我需要检查表格中的多个列。用户标识和日期。
我希望这是有道理的。
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;
}
}
}
-------获取数据看起来像这样
私有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;
}
}
}
-------获取数据看起来像这样
私有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;
}
}
}
答案 0 :(得分: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" >