以下代码显示验证消息“文件已在列表中”,如果该文件已存在,但它不会阻止它添加到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();
}
答案 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;
}