2011-06-03 82 views
2

我的作業是在ASP.NET中,我的教授希望我刪除gridview中不使用SqlDataSource的行。這可能嗎?因爲我認爲我的教授想要讓我失望,只是因爲我問了一個問題而他無法回答。如何在c#中沒有SqlDataSource的情況下在gridview中刪除一行?

+0

NitinJS向您展示了一種解決方案,實際上您可以在沒有任何回傳的情況下在網格視圖中刪除一行:) – Maidot 2011-06-03 09:22:42

+0

您使用的是什麼類型的數據源? – Magnus 2011-06-03 09:39:42

+0

男孩!你的教授確實問了一個棘手的問題。 :)順便說一句,你問你的教授? – naveen 2011-06-03 10:18:58

回答

0

我你只是想刪除的行找到行索引和簡單的調用方法

datagridview.rows.removeat(rowindex); 
+2

GridView!= DataGridView – Magnus 2011-06-03 09:38:56

1

是的,你可以從GridView控件不使用的SqlDataSource刪除行。你所要做的就是刪除源代碼行(無論源代碼是什麼...),這是綁定到你的gridview。對於這個問題

繼承人的示例代碼:

public static DataTable dt; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      dt = new DataTable(); 
      DataRow dr = null; 
      dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); 
      dt.Columns.Add(new DataColumn("Column1", typeof(string))); 
      dt.Columns.Add(new DataColumn("Column2", typeof(string)));   
      dr = dt.NewRow(); 
      dr["RowNumber"] = 1; 
      dr["Column1"] = "column1cell"; 
      dr["Column2"] = "column2cell"; 
      dt.Rows.Add(dr); 
      GridView1.DataSource = dt; 
      GridView1.DataBind(); 
     } 
    } 
    protected void LinkButton1_Click(object sender, EventArgs e) 
    { 
     if (dt.Rows.Count > 0) 
     { 
      dt.Rows.RemoveAt(0); 
      GridView1.DataSource = dt; 
      GridView1.DataBind(); 
     } 
    } 

不是最好的代碼,但如果你的教授要你做,你在這裏。 希望這可以幫助你...

0

有一個更好的方法,而不必重新綁定Gridview和它強制呼叫SqlDataSource。使用ViewState

加載Gridview時,將「數據」保存到ViewState變量中。

即:

//ok let's load the gridview with data as normal and display it 
//'sdsClasses' is the SQL data source 
gvStudents.DataSourceID = "sdsClasses"; 
gvStudents.DataSource = null; // Null out the source, as we have a SourceID instead 
gvStudents.DataBind(); //load the gridview and display it 

//save the data in a viewstate for later use 
DataView dvClasses = (DataView)sdsClasses.Select(DataSourceSelectArguments.Empty); 
DataTable dt = new DataTable(); 
if (dv != null) 
{ 
    dt = dvClasses.ToTable(); 
    ViewState["gv"] = dt; 
} 

所以,現在當過GridView的負載,你必須在內存用作ViewState的數據的。

如果您需要刪除一行,做到這一點...

在我的例子,我使用一個搜索功能來尋找我要基於從下拉列表控制SelectValue刪除,該行。你必須使用類似的東西來確定你想要刪除的行。如果您想刪除最後一行,請在DataTable上逐行執行ForEach,直到到達最後一行並刪除!

//Load the dataview that was already saved in the ViewState 
    DataTable dt = (DataTable)ViewState["gv"]; 

    //find the student in the datatable, row by row 
    bool found = false; 
    bool wsAtt = false; //flag to indicate if the student is already in the roll or not saved yet (ie: sdsClasses recordset) 
    foreach (DataRow dr in dt.Rows) 
    { 
     //compare studentID in the datatable with the selected value of the student to delete 
     //check that the field has TECNQ studentIDs otherwise use the 2nd cell in the row 
     if (dr[0].ToString().Contains("NQ")) 
      found = (found || dr[0].ToString() == ddlRemoveStudents.SelectedValue); 
     else 
     { 
      found = (found || dr[1].ToString() == ddlRemoveStudents.SelectedValue); 
      wsAtt = true; 
     } 

     //he should! 
     if (found) 
     { 
      //remove the row to the datatable 
      dt.Rows.Remove(dr); 

      //Bind the grid view to the datatable and refresh 
      gvStudents.DataSource = dt; 
      gvStudents.DataSourceID = null; // Null out the id, we have a source 
      gvStudents.DataBind(); 

      //update the viewstate with the new amount of rows 
      ViewState["gv"] = dt; 
     } 
    } 

所以你可以看到,使用ViewState的作爲替代的SqlDataSource的,你能再次操縱GridView控件如你所願,從不調用原始的SqlDataSource,除了在第一時間獲取數據。

並告訴你的教授他是一頭傲慢的豬。

相關問題