2013-08-26 71 views
0

我創建了一個gridview動態並添加了AutoGenerateEditButton = true;屬性,我看到它將編輯鏈接添加到所有的字段時,它將表加載到gridview。但是當我點擊編輯按鈕什麼也沒有發生,除了回發。我究竟做錯了什麼?使用AutoGenerateEditButton = true編輯gridview

 GridView gridData = new GridView(); 
     gridData.ID = "test"; 
     gridData.AutoGenerateEditButton = true; 
     gridData.RowEditing += (sender, e) => grid_RowEditing(tbl, e, sender); 
     gridData.DataSource = tbl; 
     gridData.DataBind(); 

protected void grid_RowEditing(DataTable tbl, GridViewEditEventArgs e, object sender) 
    { 
     ((GridView)sender).EditIndex = e.NewEditIndex; 
     // call your databinding method here 
     ((GridView)sender).DataSource = tbl ; 
     ((GridView)sender).DataBind(); 
    } 

回答

0

我的猜測是,因爲您重寫網格時每次回發都會重新創建網格,所以點擊將被忽略。

建議的方法是靜態創造無形的網格:

<asp:GridView .... Visible="false" /> 

,然後就使其可見在需要的時候。這種方法(與動態創建相比)將爲您節省十幾個問題,其中很可能包括您所面對的問題。

編輯:如果你真的真的想遵循你的路線,那麼我的猜測是你只是沒有指定你的數據鍵名,以便編輯點擊不包含點擊行的信息。

gridData.DataKeyNames = new string[] { "ID" }; 

(如果你的主鍵列名是ID

+0

你絕對沒問題,下一次如果我從頭開始創建這個,我現在會很難做到這一點,因爲他們有一個佔位符並創建了gridview,然後將它放在佔位符 –

+0

查看我的更新回答。 –

+0

好主意,但是當我補充說,它說它不能將類型字符串轉換爲字符串類型[] –

0

我在客戶端加入a <p id="p" runat="server">並補充說,這個網格控件內。 這是我的代碼。 我使用SqlDataSource而不是Datatable,你可以使用它中的任何一個。 希望工程在V ..

protected void gridview() 
    {    
     GridView gridData = new GridView(); 
     gridData.ID = "test"; 
     gridData.AutoGenerateEditButton = true; 

     gridData.RowEditing += (sender, e) => grid_RowEditing(SqlDataSource1, e, sender); 
     gridData.DataSource = SqlDataSource1; 
     gridData.DataBind(); 
     p.Controls.Add(gridData); 
    } 

    protected void grid_RowEditing(SqlDataSource tbl, GridViewEditEventArgs e, object sender) 
    { 
     ((GridView)sender).EditIndex = e.NewEditIndex; 
     // call your databinding method here 
     ((GridView)sender).DataSource = tbl; 
     ((GridView)sender).DataBind(); 
    } 

2)我試圖與datatable過了,它的工作。 這是我的代碼。

protected void gridview() 
    { 

     DataTable dt = new DataTable();    
     dt.Columns.Add("id"); 
     dt.Columns.Add("name");   
     for (int i = 0; i < 100; i++) 
     {    
      dt.Rows.Add(i.ToString(),"v"+i.ToString()); 
     } 

     GridView gridData = new GridView(); 
     gridData.ID = "test"; 
     gridData.AutoGenerateEditButton = true; 
     gridData.RowEditing += (sender, e) => grid_RowEditing(dt, e, sender); 
     gridData.DataSource = dt; 
     gridData.DataBind(); 
     p.Controls.Add(gridData); 
    } 

    protected void grid_RowEditing(DataTable tbl, GridViewEditEventArgs e, object sender) 
    { 
     ((GridView)sender).EditIndex = e.NewEditIndex; 
     // call your databinding method here 
     ((GridView)sender).DataSource = tbl; 
     ((GridView)sender).DataBind(); 
    } 
+0

'SqlDataSource'是一個可編輯的數據源。不幸的是,他正在使用'DataTable'。這就是爲什麼他必須手動處理'RowEditing'事件。 –