2014-01-20 48 views
0

下面的代碼顯示驗證消息「文件已經在列表中」,如果該文件已經存在,但它不會阻止它添加到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(); 
} 
+0

顯示_what_錯誤信息?你的意思是在某個地方拋出異常嗎?哪部分代碼導致錯誤/異常? –

+0

嗨格蘭特,我已更新帖子。我的意思是驗證消息不是例外。謝謝 – Supermode

+0

Gridviews真的只顯示數據,如果你在下拉數據表上設置主鍵,那麼問題應該被解決。 – Bit

回答

0

它看起來像最簡單的事情得到這個工作是return;更換break;

而不是突破for循環,您只需在標籤上設置錯誤消息並離開該方法。


你也可以更換第一for環路與LINQ聲明:

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