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)。

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