阻止GridView添加重复条目

时间:2014-01-20 00:52:48

标签: c# asp.net gridview

以下代码显示验证消息“文件已在列表中”,如果该文件已存在,但它不会阻止它添加到gridview。能够建议什么是错的。谢谢

if (GridFiles.Rows.Count > 0)
{
    int count = GridFiles.Rows.Count;
    dt = new DataTable();
    DataColumn dcFileName = new DataColumn("File Name", typeof(string));
    dt.Columns.Add(dcFileName);

    for (int j = 0; j < count; j++)
    {
        if (GridFiles.Rows[j].Cells[1].Text == FileName)
        {
            lblMessage.Text = "File already in the list";
            break;
        }

    }

    for (int k = 0; k < count; k++)
    {
        dr = dt.NewRow();
        dr["File Name"] = GridFiles.Rows[k].Cells[1].Text;
        dt.Rows.Add(dr);
    }


    dr = dt.NewRow();
    dr["File Name"] = FileName;
    dt.Rows.Add(dr);
    GridFiles.DataSource = dt;
    ViewState["grdContent"] = dt; //stored datable in viewstate
    GridFiles.DataBind();
}

else
{
    dt = new DataTable();

    DataColumn dcFileName = new DataColumn("File Name", typeof(string));
    dt.Columns.Add(dcFileName);
    dr = dt.NewRow();
    dr["File Name"] = FileName;
    dt.Rows.Add(dr);
    GridFiles.DataSource = dt;
    ViewState["grdContent"] = dt; //stored datable in viewstate
    GridFiles.DataBind();
}

2 个答案:

答案 0 :(得分:0)

合并两个for循环。如果它具有相同的文件名,你会跳出第一个,但是你仍然进入下一个for循环并添加它。

for (int j = 0; j < count; j++)
{
    if (GridFiles.Rows[j].Cells[1].Text == FileName)
    {
        lblMessage.Text = "File already in the list";
        break;
    }
    dr = dt.NewRow();
    dr["File Name"] = GridFiles.Rows[j].Cells[1].Text;
    dt.Rows.Add(dr);
}

答案 1 :(得分:0)

看起来最简单要做的就是将break;替换为return;

您只需在标签上设置错误消息并离开方法,而不是打破for循环。


您还可以使用LINQ语句替换第一个for循环:

if (myGrid.Rows.Cast<GridViewRow>().Any(x => x.Cells[1].Text == FileName))
{
    lblMessage.Text = "File already in the list";
    return;
}