GridView常用小知识点汇总(1)
1.不使用数据源控件,通过给DataSource动态添加数据源的方式绑定数据时如何取得控件的关键字的值:
GridView1_RowDeleting和GridView1_RowUpdating事件中通过GridView1.DataKeys[e.RowIndex].Value或GridView1.DataKeys[e.RowIndex]["字段名"]取值。不能通过e.Keys["字段名"]取到值。
注意:要设置GridView的DataKeyNames主键属性。
2.为GridView中的HyperLink列添加弹出模式窗体功能
View Code
<ItemTemplate>
<asp:HyperLink ID="HlkCateSlt" runat="server" NavigateUrl='<%# "javascript:window.showModalDialog(\"../ItemMng/CateDetail.aspx?CateId="+ Eval("fd_category_id") +"&CateName="+ Eval("fd_category_name")+"&CateType="+ Eval("fd_category_type")+"&OptType=0&CateCode="+Eval("fd_category_code")+"\",\"选项修改\",\"help:no;resizable:no;scroll:no;status:0;dialogWidth:620px;dialogHeight:620px;center:yes;\");" %>'>材料分类</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
3.GridView中的HyperLink列,传递多参数到连接的页面
View Code
<ItemTemplate>
<asp:HyperLink ID="HlkItemName" runat="server" NavigateUrl='<%# "~/ItemMng/ItemDetail.aspx?ItemId="+ Eval("fd_item_id")+ "&ItemName="+ Eval("fd_item_name")+"&PartCode="+ Eval("fd_part_code")+"&LimitSeq="+ Eval("fd_limit_seq").ToString()+"&OptFlag=0&AreaCode="+Eval("fd_area_code").ToString() %>' Text='<%# Eval("fd_item_name") %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
4.在GridView的RowDataBound事件中,通过单元格的子控件找到,反找单元格对象:
View Code
<ItemTemplate>
<asp:Button ID="BtnChlqr" runat="server" CausesValidation="false" CommandName="CHLQR" Text="确认" />
</ItemTemplate>
</asp:TemplateField>
View Code
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Button BtnChlqr = e.Row.FindControl("BtnChlqr") as Button;
if (BtnChlqr!= null) BtnHxqr.CommandArgument = e.Row.RowIndex.ToString();
DataControlFieldCell fc = BtnChlqr.Parent as DataControlFieldCell;
if (fc.Text != "" && fc.Text != " ")
{
//处理语句
}
}
}
5.GridView的RowDataBound事件中,同时获取“正常行的编辑态”和“交替行的编辑态”:
View Code
{
//进行处理
}
6.序号列
方式1:
Container.DataItemIndex
<ItemTemplate>
<%# Container.DataItemIndex + 1%>
</ItemTemplate>
</asp:TemplateField>
方式2:
考虑分页的情况
<ItemTemplate>
<%# this.GridView1.PageIndex * GridView1.PageSize
+ GridView1.Rows.Count + 1%>
</ItemTemplate>
</asp:TemplateField>
7.GridView中使用DropDownList
RowCreated
{
//可动态创建控件
switch (e.Row.RowType)
{
case DataControlRowType.DataRow://只有数据行可以绑定数据
#region 编辑态时控件的处理
//正常行的编辑态、交替行的编辑态
if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit))
{
//物理化学区分
DropDownList ddlPhysChem = e.Row.FindControl("ddlPhysChem") as DropDownList;
ddlPhysChem.Items.Clear();
ddlPhysChem.Items.Add(new ListItem("物理", "物理"));
ddlPhysChem.Items.Add(new ListItem("化学", "化学"));
//状态标记
DropDownList ddlEnabledFlag = e.Row.FindControl("ddlEnabledFlag") as DropDownList;
ddlEnabledFlag.Items.Clear();
ddlEnabledFlag.Items.Add(new ListItem("禁用", "0"));
ddlEnabledFlag.Items.Add(new ListItem("启用", "1"));
}
#endregion
break;
default:
break;
}
}
RowDataBound
{
try
{
switch (e.Row.RowType)
{
case DataControlRowType.DataRow:
//Convert.ToString(DataBinder.Eval(e.Row.DataItem, "rec_id"));
string strAskDelMsg = "javascript:return confirm('您确定要删除该记录吗?')";
Button BtnTemp = e.Row.FindControl("btnDelRow") as Button;
BtnTemp.OnClientClick = strAskDelMsg;
//LinkBtnTemp.Attributes.Add("onclick", strAskDelMsg);
string strPhysChem = "", strEnabledFlag="";
#region 编辑态时控件的处理
//正常行的编辑态、交替行的编辑态
if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit))
{
//物理化学区分
strPhysChem = DataBinder.Eval(e.Row.DataItem, "fd_phys_chem").ToString();
DropDownList ddlPhysChem = e.Row.FindControl("ddlPhysChem") as DropDownList;
if (ddlPhysChem != null )
{
ListItem ItemSlt = ddlFdPhysChem.Items.FindByValue(strPhysChem);
if (ItemSlt != null) ItemSlt.Selected = true;
}
//状态标记
strEnabledFlag = DataBinder.Eval(e.Row.DataItem, "fd_enabled_flag").ToString();
DropDownList ddlEnabledFlag = e.Row.FindControl("ddlEnabledFlag") as DropDownList;
if (ddlPhysChem != null)
{
ListItem ItemSlt = ddlFdPhysChem.Items.FindByValue(strEnabledFlag);
if (ItemSlt != null) ItemSlt.Selected = true;
}
}
#endregion
#region 浏览态时控件的处理
//正常行的浏览态、交替行的浏览态
if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Normal))
{
strEnabledFlag = DataBinder.Eval(e.Row.DataItem, "fd_enabled_flag").ToString();
Label lblEnabledFlag = e.Row.FindControl("lblEnabledFlag") as Label;
lblEnabledFlag.Text = strEnabledFlag.Equals("1") ? "启用" : "禁用";
}
#endregion
break;
default:
break;
}
}
catch (Exception ex)
{
lblMsg.Text = "RowDataBound():" + ex.Message;
}
}
8.GridView的RowDataBound事件中,获取当前行的某个数据列
http://msdn.microsoft.com/en-us/library/ms972833.aspx
<1>. Cells[x].Txt。
从列单元格的文本值获取。这种方法简单高率,最为常用,但是功能单纯。此法存在几个缺点:
(1)无法获取到设置了隐藏属性的数据列的值,所取到的值为“”(空)。
(2)只能获取在HTML中定义过的数据列,无法查询数据源中的当前数据行的所有字段列。一般情况下,通过HTML设置GridView的字段列的数量往往小于数据源的实际字段数量,这是因为从业务逻辑的角度看,并不是所有的字段都是要显示在页面上的。当需要使用没有被显示的字段时,此法就不能直接满足需求了。
<2>. e.Row.Cells[x].FindControl("YourcontrolName")。
这是在单元格内查找某个服务器控件,从而获得其数据值。这种方式可以操作单元格内的服务器控件。此法一般用于处理模板列中的数据或控件。
<3>. (DataRowView)e.Row.DataItem).Row.ItemArray[x].ToString()。
此法的核心是e.Row.DataItem,它是GridView的行数据集,为Object类型,将其转化为DataRowView类型后,可以获得更多的操作方法。此数据集表示数据源当前行的全部字段列,ItemArray[x]是当前行全部字段列的数组对象,可以通过索引x获得任意字段值。此法的强悍之处是可以对数据源的全部字段查询。
<4>. DataBinder.Eval(e.Row.DataItem, "YourDataFieldName").ToString()。
此法仍然基于e.Row.DataItem,其特点是更快捷的获得数据源的任意字段值,因为使用了DataBinder.Eval(),需要注意的是不要写错字段名称。
<5>. 将e.Row.DataItem转化为自定义类型,实现数据类型化。
例如:
DSRequestTracking.TB_RequestTrackingRow rtrow=(DSRequestTracking.TB_RequestTrackingRow)((DataRowView)e.Row.DataItem).Row;
RequestStatusDropDownList1.SelectedValue = rtrow.StatusID.ToString();
其中DSRequestTracking是通过DSRequestTracking.xsd文件在工程中自定义的强类型DataSet, TB_RequestTrackingRow是VS自动为此强类型生成的创建数据行对象的方法。通过此法,实现了类型化数据的广泛应用。数据类型化的好处很多,显而易见的便是传一个类型数据给方法,取代一大堆参数,另外就是再也不会发生字段名拼写错误的情况。
◆01.知识点-GridView的行类型(DataControlRowType)与行状态(DataControlRowState)
◆01.1行类型
public enum DataControlRowType
| 成员名称 | 说明 |
|---|---|
| DataRow | 数据控件的数据行。只有 DataRow 行能绑定数据。 |
| EmptyDataRow | 显示页按钮或页导航控件的行。页导航行不能绑定数据。 |
| Footer | 数据控件的脚注行。脚注行不能绑定数据。 |
| Header | 数据控件的标题行。标题行不能绑定数据。 |
| Pager | 显示页按钮或页导航控件的行。页导航行不能绑定数据。 |
| Separator | 行分隔符。行分隔符不能绑定数据。 |
DataControlRowType 枚举标识数据控件中行的功能。它由 DetailsView 和 GridView 控件使用,以区分显示数据的行和显示其他用户界面 (UI) 元素的行,如控件的标题行、行分隔符或页导航按钮。
当枚举整个 GridViewRowCollection 或 DetailsViewRowCollection 集合时,可以使用 DataControlRowType 枚举分别标识 GridViewRow 或 DetailsViewRow 对象的类型。如果您在编写使用行的数据控件,可使用 DataControlRowType 枚举标识控件中不同行的功能。
◆01.2行状态
指定数据控件(例如 DetailsView 或 GridView)中行的状态。
此枚举有一个 FlagsAttribute 属性,允许其成员值按位组合。
[FlagsAttribute]
publicenum DataControlRowState
| 成员名称 | 说明 |
|---|---|
| Normal | 指示该数据控件行处于正常状态。 Normal 状态与其他状态相互排斥,但 Alternate 状态除外。 |
| Alternate | 指示该数据控件行是交替行。
Alternate 状态在任何时候都可以与其他状态组合,例如与 Normal、Edit 或 Insert 组合。 这些行可能会受到数据控件的 AlternateRowStyle 属性影响(若已设置)。 |
| Selected | 指示该行已被用户选定。 |
| Edit | 指示该行处于编辑状态,这通常是单击行的“编辑”按钮的结果。 通常,Edit 和 Insert 状态互相排斥。 |
| Insert | 指示该行是新行,这通常是单击“插入”按钮添加新行的结果。 通常,Insert 和 Edit 状态互相排斥。 |
备注
posted on 2011-07-25 19:15 LeeXiaoLiang 阅读(194) 评论(0) 收藏 举报

浙公网安备 33010602011771号