GridView技巧(一)

網友介紹了個好網站:孟子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)。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章