網友介紹了個好網站:孟子e章
裏面有好些講GridView使用技巧的文章,學習到了。輕鬆地解決了之前一個無解的問題,看來不是GridView不強,實在是我這個使用者水平不夠啊。
如果一個GridView要更新自身的值,點點鼠標是不能解決的。另外關於主鍵的問題,原來,我以爲若是GridView實現自更新,那麼非得要把主鍵的值放到GridView中顯示出來,微軟對於這個問題果然有解決。它提供了一個DataKeys的屬性,用於保存所有主鍵字段。可以通過訪問:GridView.Datakeys[RowIndex].Value來獲得主鍵值。
如果要更新自身的值,要自己寫代碼,不過之先要在sqlDataSource中設置UpdateQuery的更新字符串。然後創建GridView的Updating事件。如下:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = GridView1.Rows[e.RowIndex];
if (row == null) return;
string txt2 = ((TextBox)row.Cells[1].Controls[0]).Text;
string txt3 = ((TextBox)row.Cells[2].Controls[0]).Text;
string txt4 = ((TextBox)row.Cells[3].Controls[0]).Text;
string txt5 = ((TextBox)row.Cells[4].Controls[0]).Text;
SqlDataSource1.UpdateParameters.Add(new Parameter("@id", TypeCode.Int32,
GridView1.DataKeys[e.RowIndex].Value.ToString()));
SqlDataSource1.UpdateParameters.Add(new Parameter("@txt2", TypeCode.String, txt2));
SqlDataSource1.UpdateParameters.Add(new Parameter("@txt3", TypeCode.String, txt3));
SqlDataSource1.UpdateParameters.Add(new Parameter("@txt4", TypeCode.String, txt4));
SqlDataSource1.UpdateParameters.Add(new Parameter("@txt5", TypeCode.String, txt5));
}
可以說是一個超簡單的示例了。
同時編輯GridView中的所有行:
這個問題也很重要。很有解決意義,本人蔘考如下資料,得出一般方法:點此進入
一、對所有要更新的列使用模板,在ItemTemplate中定義對應的編輯控件,如文本框、DropDownList之類的。
二、放一個保存按鈕,對其服務器端事件編程,方法就是循環處理GridView中的每一行,每一行的處理方法就是,先設好UpdateParameters,像上文一樣,然後再調用sqlDataSource.Update(),再sqlDataSource.UpdateParameters.clear()。
三、如果編輯控件是比較特殊的,如DropDownList、RadioButtonList之類的,則需要在RowCreate中對其進行初始化。
四、在RowDataBound事件把數據填充進對應編輯控件
就是這樣了。編輯所有行的最大關鍵就是第一點。
選擇GridView中的多行:
這個問題也是很普遍。參考如右資料總結:點此處進入
實現確實很簡單,兩種方法,一種由服務器端代碼實現,一種完全由客戶端代碼實現。服務器端代碼實現的方法就是麻煩,需要回發再次請求頁面,下下之策。
客戶端代碼的實現,關鍵在於編輯GridView中放CheckBox那一列的模板,爲表頭上放一個CheckBox,並設置它的onClick事件。記得此CheckBox是Html元素。不用搞成Html服務器控件或web服務器控件。
選定的原理主要是要用dom了。熟dom,那很簡單,Table對象有一個rows,cols的屬性,上面資料用的rows.cells的方法循環處理每一行,其實也可以使用cols的方法,table.cols[1].getElementByTag("input"),一網打盡了,然後處理所得數組元素即可。有人說用document.getElementByTag("input"),拜託把dom研究好了再說。至於設置選擇行的樣式的問題,這個是個javascript與css的問題。方便。
所參考資的實現是通過綁定gridview到DataView上,所以要手工實現分頁。事實上可以綁數據源的。
填充固定的行數(參考資料)
方法很簡單,每一行被創建後都有一個綁定事件,在行綁定事件中可以判斷這一行是否爲尾行:
if (e.Row.RowType == DataControlRowType.Footer)
如果是頁腳行則在它之前手工新增行,方法很簡單,無非就是GridView.Rows.AddAt(xxx)。