我有一个包含3个复选框的GridView。用户可以在GridView中创建许多行,但是他们不能在每行中勾选相同的复选框。
例如,在日期库下面的屏幕截图中,第一行已选中Approved1
,第二行已选中Approved3
,这很好:
但是如果我在GridView中添加另一行并在第三行中检查Approved1
所以现在看起来像这样,我想提醒用户他们必须更改复选框:
我想循环遍历数据库中的每一行,并提醒用户他们无法选择相同的已批准复选框,即在此示例中,您不能勾选Approved1
两次。
bool check1 = false;
bool check2 = false;
bool check3 = false;
DataSet ds1 = DataUtils.GetQuoteDetails((int.Parse(Request.QueryString["QuoteID"])), Company.Current.CompanyID);
foreach (DataRow dr in ds1.Tables[0].Rows)
{
check1 = Convert.ToBoolean(ds1.Tables[0].Rows[0]["Approved1"]);
check2 = Convert.ToBoolean(ds1.Tables[0].Rows[0]["Approved2"]);
check3 = Convert.ToBoolean(ds1.Tables[0].Rows[0]["Approved3"]);
}
我的代码在数据库中循环,但我不知道如何检查是否已经勾选了两次已批准的字段。
答案 0 :(得分:0)
试试这个: -
try
{
List<DataRow> datarowcol = ds1.Tables[0].Rows.Cast<DataRow>().Where(x => x["Approved1"] == "1").ToList();
if (datarowcol != null && datarowcol.Count > 1)
{
throw new Exception("Your message to user");
}
}
catch (Exception ex)
{
//Print your message -> ex.Message
}
如果任何行Approved1
等于"1"
,它将返回datarow,否则它将返回null。
未经测试但应该可以使用。
注意:确保添加了名称空间using System.Linq
。
希望这会对你有所帮助。
答案 1 :(得分:0)
您可以逐列查看是否存在“Approved = 1”值的行。
DataSet ds1 = DataUtils.GetQuoteDetails((int.Parse(Request.QueryString["QuoteID"])), Company.Current.CompanyID);
DataTable dt = ds1.Tables(0);
foreach (DataColumn dc in dt.Columns) {
switch (dc.ColumnName) {
case "Approved1":
case "Approved2":
case "Approved3": //-- add more column names here that you want to check
DataRow[] approvedRows = dt.Select(dc.ColumnName + " = 1");
if (approvedRows.Length > 1) {
//-- this is the case you are looking for... this column has more than one rows selected
//-- I am showng a messagebox.. you may do other custom handling here..
string msg = string.Format("Column \"{0}\" has {1} selections, which is not allowed!", dc.ColumnName, approvedRows.Length);
MessageBox.Show(msg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return; // we don't want to show any more messageboxes.
}
break;
}
}