在众多的服务器端控件中,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");
}
}
当然 这样的效率是相当低下的,每创建一行 就会执行代码一次,而这样也造成了代码效率低下!
谢谢各位看完本文章! 个人水平有限,如果有不对的地方,请见谅!