GridView控件常见问题及处理方法

3/23/2008来源:软件工程人气:9725

asp.net 1.1版本中的DataGrid控件用于显示表格式的数据,相信大家都用过。ASP.net 2.0版本中GridView控件是DataGrid控件的继续者,功能比DataGrid增强不少,但是也有很多地方不同。下面把使用中发现的不同点列举如下,希望能对大家的工作有所帮助:
1. 关于隐藏字段的处理:

DataGrid中我们一般把不需要显示又需要在编程中使用的字段在设计期设置为Visible=False,这样的字段不会显示出来,但在绑定数据时会被绑定值,所以我们可以通过DataGridItem.Cell[x].Text取到所需数据行的数据。

GridView中直接在设计期设置Visible=False却不能满足上述需求,因为这样设置,虽然字段不会被显示出来了,但数据也没有被绑定到相应的Cell中,通过GridViewRow.Cell[x].Text取到的全是空字符串,估计应该是控件的Bug。假如想达到上述的效果,可以通过其它方法实现,只是麻烦一些:

首先,不要设置字段的Visible=False

然后处理RowDataBound事件。


PRotected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[x].Visible = false;
}
2. 关于按钮列的事件:

在DataGrid中,要响应控钮列中的按钮点击事件,可以处理ItemCommand事件:事件的第一个参数source是object类型的,值为DataGrid,第二个参数e是DataGridCommandEventArgs类型的,e中包含四个属性:Item的值为按钮所在的行, CommandSource的值为所点击的按钮,CommandName的值为按钮在设计期定义的值,CommandArgument的值固定为空字符串。在使用中,可以根据Item来区分点击的是哪个行中的按钮,可以根据CommandName来区分一个行中的多个按钮。


private void DataGrid1_ItemCommand(object source, DataGridCommandEventArgs e)
{

}
在GridView中,要响应控钮列中的按钮点击事件,可以处理RowCommand事件:事件的第一个参数sender是object类型的,值为GridView,第二个参数e是GridViewCommandEventArgs类型的,e中仅包含三个属性,比DataGrid控件中的相应事件少了要害的Item属性,CommandSource的值也与DataGrid中的不一样,在这里为GridView,CommandName的值为按钮在设计期定义的值,CommandArgument的值为被点击的按钮所在行的索引。在使用中,可以根据CommandArgument来区分点击的是哪个行中的按钮,可以根据CommandName来区分一个行中的多个按钮。


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)

{

GridViewRow item = this.GridView1.Rows[Convert.ToInt32(e.CommandArgument)];

}
3. 关于按钮的客户端提示:

一般情况下,我们希望在最终删除一条数据之前让用户进行确认,这个可以使用模板列,在模板列中放置按钮控件,为按钮设置客户端单击事件。

在Asp.net 1.1中,需要使用编程方法才能为按钮指定客户端单击事件,方法如下:


<asp:TemplateColumn>

<ItemTemplate>

<asp:LinkButto>