鲜荣彬
Herry

 

     在众多的服务器端控件中,GridView这个控件大家并不是很陌生,因此,我在这里讲讲它的一些小的技巧。

  在我们需要将数据以表格的形式展示给用户时,不需要考虑效率时,服务器控件GridView是一个不错的选择。

  我们需要明确,在这张表格中,每列表示一个字段,每一行表示一条记录。每一行都是我们需要从数据库中取得数据,那么如何展示这个数据便是我们需要考虑的。我的习惯是将每一列转换成模板列,然后对应的绑定字段,这样做的好处是对程序员来说,自由性增强了,微软那套约束太强悍了,给程序员的自由性太差,幸好有模板列。

  首先,看你是否有模板列,如果没有,你可以点击GridView,选择添加新列,选择模板列,如图

                                                                      

 

在得到了我们所希望的模板列后,我们便会对模板列进行编辑 如下图

                                                     

                                                      

                          在选择了我们所要编辑的模板列后,会得到如下所示

                          

   选择某个模板后,你可以看见众多的模板
   但是我们最常用的模板是TemplateField,在这里,程序员自由发挥的可能性更大,这里你可以根据需要将显示你所要显示的任何形式,如Lable、TextBox、LinkButton等等。,如有不懂的地方,可去MSDN查看帮助  

   而我们最常用的模板便是 ItemTemplate,我喜欢在这里面书写我的代码,如下

    <asp:TemplateField HeaderText="Sex" SortExpression="Sex">
      <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%#this.ReturnSex((Eval("sex").ToString())) %>'></asp:Label>
      </ItemTemplate>
    </asp:TemplateField>

  细心的朋友应该会发现,我在绑定字段的时候用的是Eval(),并没有用Bind(),因为Eval数据绑定是单向绑定的,只输出而不会回发,而Bind()数据绑定是双向的。当然效率肯定是不一样的了。

  如果控件有许多事件,你可以根据需要触发响应的事件,最主要的是Command事件 在此事件中有CommandEventArgs这个类,这个类有两个属性 CommandName,CommandArgument 可供我们大大的利用,我们可以往里面传递我们希望传递的数据,比如我们获得我们当前编辑行的的主键字段,根据主键字段然后去进行增删改查操作,这在工作中用到的最多。

     例如下面的代码

      <asp:ImageButton ID="ImageButton2" ImageUrl="~/images/new_del.gif"  runat="server" oncommand="ImageButton2_Command" CommandName='<%#Eval("column1") %>' OnClientClick="return confirm('are you sure!')" />

 

  在我们新增 CommandField一列并且让 ShowEditButton="True",我们在页面点击编辑链接后,会立刻触发 RowEditing 事件,如果让DeleteEditButton="True",如果点击编辑链接,则会立刻触发RowDeleting事件,而这些事件太过于繁琐,能避免尽量避免。毕竟我个人认为,自己手写代码自由度更高。
     但对于选择按钮来说,我个人挺喜欢的。 当我们点击选择按钮来说,会触发两个事件,即SelectedIndexChanging和SelectedIndexChanged 两个事件,而前面事件我个人认为似乎是来打酱油的,而后者事件更有用。
   在后面事件中,我们可以
     txtkey.Text = ((Label)gvSearch.SelectedRow.FindControl("lblkey")).Text
  在GridView中得到我们编辑一行的某列值 这有助于我们简单而快速的获得我们需要的某个值,这种方法是很有效的喔!

 

 为了实现 鼠标滑过一行变色的效果 我们可以在 RowCreated 事件中编写代码
   代码如下
    protected void gvSearch_RowCreated(object sender, GridViewRowEventArgs e)
        {

 

            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Attributes.Add("onmouseover", "currentcolor=this.style.backgroundColor;this.style.backgroundColor='#ccddee'");
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor");
            }
           
        }
    当然 这样的效率是相当低下的,每创建一行 就会执行代码一次,而这样也造成了代码效率低下!

    谢谢各位看完本文章! 个人水平有限,如果有不对的地方,请见谅!

 

 

 

posted on 2011-11-27 14:58  Herry彬  阅读(321)  评论(0编辑  收藏  举报