2010-02-12 125 views
3

我有一個GridView控件連接到允許行編輯的數據源。我使用指向更新,取消和編輯GridView命令的標準編輯/保存/刪除按鈕。GridView更新後覆蓋editindex

我想添加一個額外的按鈕,「下一步」內嵌保存/取消按鈕。這將與保存按鈕功能相同,但也會向網格添加一行,並將該行放入編輯模式。爲此,我將代碼添加到GridView的Updated事件中,該事件向db添加新記錄,重新綁定網格並設置editindex。這似乎工作,但網格實際上並沒有在編輯模式下返回。我刪除了新的記錄代碼,只留下聲明來設置editindex,但網格仍然不會保持編輯模式。

在這種情況下是否可以強制網格保持編輯模式?看起來,除非你設置GridViewUpdatedEventArgs的取消屬性,網格將翻轉到查看模式。我不想在這種情況下設置取消屬性,因爲我希望GridView觸發我的數據源對象以保存記錄。

如果這不起作用,看起來我需要允許更新正常進行,返回到客戶端,然後發送另一個服務器請求來添加記錄。我不想這樣做,我想在一次往返的情況下執行必要的操作。

這裏是代碼(簡體)看起來像:

protected void Button1_Click(object sender, EventArgs e) 
    { 
     // Works Fine 
     this.sampleDataSource.Insert(); 
     this.sampleGridView.DataBind(); 
     this.sampleGridView.EditIndex = this.sampleGridView.Rows.Count - 1; 
    } 

protected void sampleGridView_RowUpdated(object sender, GridViewUpdatedEventArgs e) 
    { 
     // Grid will display new row, but will not be in edit mode 
     this.sampleDataSource.Insert(); 
     this.sampleGridView.DataBind(); 
     this.sampleGridView.EditIndex = this.sampleGridView.Rows.Count - 1; 
    } 

回答

1

我發現了一個解決方案,看起來像做我想做的事情。基本上我需要讓GridView通過正常的事件序列,然後設置editindex。這裏的代碼,再次簡化:

protected void sampleGridView_RowUpdated(object sender, GridViewUpdatedEventArgs e) 
    { 
     this.insertNewRow = true; 
    } 

protected void Page_LoadComplete(object sender, EventArgs e) 
    { 
     if (this.insertNewRow) 
     { 
      this.sampleDataSource.Insert(); 
      this.sampleGridView.DataBind(); 
      this.sampleGridView.EditIndex = this.sampleGridView.Rows.Count - 1; 
     }  
    } 
0

我們可能會需要看到一些代碼...但是,我能猜到是哪裏的問題,從你的描述。您可能需要設置EditIndex 之前的以重新綁定。如果這不起作用(超出範圍?),那麼你必須調用DataBind()來獲取你的新行,設置EditIndex,再次調用DataBind()。

不幸的是,僅僅設置EditIndex並不能完成任務。您必須設置索引並調用DataBind()。

+0

我已經有了一個插入新行並自動翻轉到編輯模式的工作方法。但是我一直在gridview上下文之外調用它。當我嘗試在GridView更新過程中執行此操作時,EditIndex或者不起作用,或者被更新過程覆蓋。我不確定這是否是一個具有約束力的問題,但我一定會玩這個。我會試着想出一個這個問題的簡明例子 – 2010-02-13 01:50:49

+1

重新閱讀你的問題後,我可以看到你正在使用一些自動魔術數據綁定和更新。我通常會自己避免這種情況,並在代碼隱藏中處理這些任務......正是出於這個原因。當事情不起作用時,很容易看到發生了什麼問題。 – Bryan 2010-02-13 22:22:00

0

我有類似的問題,設置所需的索引。這個解決方案爲我工作: grdProjectsForSubmiting - 用於顯示數據的GridView

grdProjectsForSubmiting.EditIndex = neededIndex; //不要忘記,這些行從0開始枚舉,而不是從1開始枚舉!
grdProjectsForSubmiting.DataSource = ProjectsController.SessionTodayEntries;
grdProjectsForSubmiting.DataBind();