只允许在每一行中检查一个项目

时间:2016-05-18 14:22:39

标签: c# asp.net gridview

我有一个包含3个复选框的GridView。用户可以在GridView中创建许多行,但是他们不能在每行中勾选相同的复选框。

例如,在日期库下面的屏幕截图中,第一行已选中Approved1,第二行已选中Approved3,这很好:

enter image description here

但是如果我在GridView中添加另一行并在第三行中检查Approved1所以现在看起来像这样,我想提醒用户他们必须更改复选框:

enter image description here

我想循环遍历数据库中的每一行,并提醒用户他们无法选择相同的已批准复选框,即在此示例中,您不能勾选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"]);
     }

我的代码在数据库中循环,但我不知道如何检查是否已经勾选了两次已批准的字段。

2 个答案:

答案 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;
    }
}