複数のフィールドを持つDetailsviewがあり、常に挿入モードに設定されています。これらのフィールドのうち、ユーザーが新しいレコードを挿入する前に、そのユーザーがその日付のレコードを既に入力しているかどうかを確認したかったのです。
要求された日付が休日であるかどうか、または同じ日付に対して異なるユーザーからすでに2つの異なる要求が行われている場合(同じ日付を要求する人が2人を超えることはできないため)など、複数の要件を確認する方法を理解する必要がありました。 。)
ポストバックがあるのは挿入が押されたときだけなので、カスタムバリデーターを機能させることができませんでした。
挿入が押されたときにさまざまな検証をチェックする方法があるのではないかと思っていましたが、すべて合格した場合にのみ挿入を実行しますか?
テーブルの複数の列をチェックする必要があります。ユーザーIDと日付。
それが理にかなっていることを願っています。
asp:DetailsView ID = "DetailsView1" runat = "server" DataSourceID = "ObjectDataSource1" DataKeyNames = "bwrequestid" Height = "29px" Width = "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;
}
}
}
-------データの取得は次のようになります
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;
}
}
}