分享
 
 
 

DataGrid使用心得(附大量代码)

王朝other·作者佚名  2006-05-09
窄屏简体版  字體: |||超大  

DataGrid使用心得(附大量代码)

1. 为 DataGrid 控件设计样式

在<asp:datagrid id="DataGrid1" runat="server">之后添加如下代码

<FooterStyle ForeColor="Black" BackColor="#CCCCCC"></FooterStyle>

<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#008A8C"></SelectedItemStyle>

<AlternatingItemStyle BackColor="Gainsboro"></AlternatingItemStyle>

<ItemStyle ForeColor="Black" BackColor="#EEEEEE"></ItemStyle>

<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#000084"></HeaderStyle>

说明:

(1) 在每个标签内主要是 ForeColor BackColor Font-Bold 这几个属性值

2. 为 DataGrid 控件添加绑定列

<asp:BoundColumn DataField="" ReadOnly="True" HeaderText=""></asp:BoundColumn>

说明:

(1) 在标签内的基本属性是 DataField / HeaderText

(2) DataFormatString 用于 获取或设置指定列中各项的显示格式的字符串。

形式为 { A: Bxx }。例如,格式化字符串 {0:F2} 将显示带两位小数的定点数。

其中A值只能设置为 0,因为每个单元格中只有一个值。

冒号后的字符(常规示例中为 B)指定值的显示格式

C 以货币格式显示数值。

D 以十进制格式显示数值。

E 以科学记数法(指数)格式显示数值。

F 以固定格式显示数值。

G 以常规格式显示数值。

N 以数字格式显示数值。

X 以十六进制格式显示数值。

(3) Visible 获取或设置一个值,该值指示此列在 DataGrid 控件中是否可见。

(4) ReadOnly 设置些列是否只读,若是只读的话,则不能修改.

(5) SortExpression 获取或设置选择进行排序的列时传递到 OnSortCommand 方法的字段或表达式的名称。

3. 为 DataGrid 控件添加模板列

<asp:TemplateColumn HeaderText="类别">

<ItemTemplate>

<asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "actorclassname") %>' runat="server" ID="Label1"/>

</ItemTemplate>

<EditItemTemplate>

<select name="sltclassname">

<% = ActorClass.GetParentClass(0) %>

</select>

</EditItemTemplate>

</asp:TemplateColumn>

说明:

(1) 基本框架是

<asp:TemplateColumn HeaderText="类别">

<ItemTemplate></ItemTemplate>

</asp:TemplateColumn>

(2) 全面的模板列

<asp:TemplateColumn>

<HeaderTemplate>

<b> Tax </b>

</HeaderTemplate>

<ItemTemplate>

<asp:Label

Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>'

runat="server"/>

</ItemTemplate>

<EditItemTemplate>

<asp:CheckBox

Text="Taxable"

runat="server"/>

</EditItemTemplate>

<FooterTemplate>

<asp:HyperLink id="HyperLink1"

Text="Microsoft"

NavigateUrl="http://www.microsoft.com"

runat="server"/>

</FooterTemplate>

</asp:TemplateColumn>

(3) 为布尔型列应用模板列

<asp:TemplateColumn>

<ItemTemplate>

<asp:Label

Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>'

runat="server"/>

</ItemTemplate>

<EditItemTemplate>

<asp:CheckBox

Text="Taxable"

runat="server"/>

</EditItemTemplate>

</asp:TemplateColumn>

在正常状态,用 Label控件显示

在编辑状态,用 CheckBox控件显示

(4) 为枚举类型列应用模板列,如业务地区(全网/广东/云南等等)

<asp:TemplateColumn HeaderText="处理方式">

<ItemTemplate>

<asp:Label ID="lbStatus">

<%# DataBinder.Eval(Container, "DataItem.DealWith") %>

</asp:Label>

</ItemTemplate>

<EditItemTemplate>

<asp:DropDownList id="dpStatus2" runat="server" DataTextField="status">

<asp:ListItem Value="Log">Log(日志)</asp:ListItem>

<asp:ListItem Value="SendSms">SendSms(短信)</asp:ListItem>

</asp:DropDownList>

</EditItemTemplate>

</asp:TemplateColumn>

在正常状态,用 Label控件显示

在编辑状态,用 DropDownList控件显示

(5) 为长字符串应用模板列,如一篇文章的内容

还未做过

4. 为 DataGrid 控件添加按钮列

<asp:ButtonColumn

HeaderText="Remove from cart"

ButtonType="PushButton"

Text="Remove"

CommandName="RemoveFromCart" />

(1) 要使用按钮列,必须在 DataGrid 控件中添加 OnItemCommand 属性,并为该事件添加处理方法.

(2) 模板列可以实现按钮列能实现的任何功能.

5. 为 DataGrid 控件添加编辑列

<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="编辑" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>

(1) ButtonType 有两个值: LinkButton 超级链接样式按钮的列 | PushButton 普通按钮的列。

6. 为 DataGrid 控件添加超链接列

<asp:HyperLinkColumn Text="添加子类" DataNavigateUrlField="ActorclassID" DataNavigateUrlFormatString="addActorClass.aspx?classID={0}"></asp:HyperLinkColumn>

(1) 为每一行设置相同的文字及跳转的URL地址

设置 Text 和 NavigateUrl 属性,则列中的所有超级链接将共享同一标题和 URL

(2) 为每一行设置不同的文字及不同跳转的URL地址

A. 用 DataTextField 设置数据源字段,若还想在原数据的基础上加工一下(如字段值为300,想显示为300元)

则再设置 DataTextFormatString 字段

B. 用DataNavigateUrlField 及 DataNavigateUrlFormatString 来设置URL地址

用DataTextField = "money" DataTextFormatString = "{0}元"

C. 举例

DataNavigateUrlField="ActorclassID" DataNavigateUrlFormatString="addActorClass.aspx?classID={0}"

7. 为 DataGrid 控件添加"编辑"代码

在 DataGrid 标签中加入

OnUpdateCommand="DataGrid1_Update" OnCancelCommand="DataGrid1_Cancel" OnEditCommand="DataGrid1_Edit"代码

在codeBehind页面加入如下代码

///响应编辑按钮

public void DataGrid1_Edit(Object sender, DataGridCommandEventArgs e)

{

DataGrid1.EditItemIndex = e.Item.ItemIndex;

if (Request.QueryString.Get("classID") != null)

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));

else

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));

}

///响应取消按钮

public void DataGrid1_Cancel(Object sender, DataGridCommandEventArgs e)

{

DataGrid1.EditItemIndex = -1;

if (Request.QueryString.Get("classID") != null)

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));

else

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));

}

///响应更新按钮

public void DataGrid1_Update(Object sender, DataGridCommandEventArgs e)

{

TextBox ClassNameText = (TextBox)e.Item.Cells[1].Controls[0];

string className = ClassNameText.Text;

int classID = Int32.Parse((e.Item.Cells[0].Text).ToString());

TextBox orderID2 = (TextBox)e.Item.Cells[5].Controls[0];

int orderID = Int32.Parse(orderID2.Text);

ActorClass.ModifyActorClass(className,classID,orderID);

DataGrid1.EditItemIndex = -1;

if (Request.QueryString.Get("classID") != null)

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));

else

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));

}

说明

(1) DataGrid 事件处理程序的格式

MethodName(Object sender, DataGridCommandEventArgs e)

(2) 更新按钮的说明

A. 获取编辑状态中的文本框

TextBox ClassNameText = (TextBox)e.Item.Cells[1].Controls[0];

string className = ClassNameText.Text;

B. 获取编辑状态中的下拉列表框

方法一

int classID;

classID = Int32.Parse(Request.Form.Get("sltclassname"));

方法二

DropDownList bbb = (DropDownList)e.Item.Cells[10].FindControl("dpStatus2");

string ddpValue = bbb.SelectedValue

C. 获取编辑状态中的复选框

bool boolEnabled = ((CheckBox)e.Item.FindControl("chk_enabled")).Checked;

String str2;

if (boolEnabled)

{

str2="1";

}

else

{

str2="0";

}

赋值给 str2 ,原因是插入到数据库的布尔型值只能是 1 或者 0

D. 获取编辑状态中的文本值,即该列是只读的.

string storyID = (e.Item.Cells[0].Text).ToString();

8. 为 DataGrid 控件添加分页事件

在 DataGrid 控件标签中加入如下代码

OnPageIndexChanged="DataGrid1_PageIndexChanged"

在后台中加入如下代码

/// <summary>

/// 响应分页事件

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

public void DataGrid1_Page(Object sender, DataGridPageChangedEventArgs e)

{

DataGrid1.CurrentPageIndex = e.NewPageIndex;

DataBind();

}

9. 为 DataGrid 控件添加绑定事件,即在 DataGrid绑定时发生的事件处理

一般用些事件来,做一些页面上的效果.如更改背景色,文本框大小等.

OnItemDataBound="DataGrid1_ItemDataBound"

/// <summary>

/// 响应DataGrid绑定事件

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

public void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

{

if (e.Item.ItemType == ListItemType.Item)

{

e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#c8dafa'");

e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='white'");

}

else if (e.Item.ItemType == ListItemType.AlternatingItem)

{

e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#c8dafa'");

e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='#f6f6f6'");

}

}

10. 为 DataGrid 控件添加接钮处理事件程序

在 DataGrid 控件标签中加入如下代码

OnItemCommand="ItemsGrid_Command"

在后台中加入如下代码

public void ItemsGrid_Command(Object sender, DataGridCommandEventArgs e)

{

switch(((LinkButton)e.CommandSource).CommandName)

{

case "Delete":

int classID = Int32.Parse((e.Item.Cells[0].Text).ToString());

ActorClass.DeleteActorClass(classID);

if (Request.QueryString.Get("classID") != null)

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));

else

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));

break;

// Add other cases here, if there are multiple ButtonColumns in

// the DataGrid control.

case "hidden":

int actorID = Int32.Parse((e.Item.Cells[0].Text).ToString());

ActorClass.HiddenActorClass(actorID);

if (Request.QueryString.Get("classID") != null)

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));

else

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));

break;

case "MoveUp":

int actorclassID = Int32.Parse((e.Item.Cells[0].Text).ToString());

string orderID = (e.Item.Cells[5].Text).ToString();

ActorClass.MoveUp(orderID,actorclassID);

if (Request.QueryString.Get("classID") != null)

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));

else

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));

break;

case "MoveDown":

actorclassID = Int32.Parse((e.Item.Cells[0].Text).ToString());

orderID = (e.Item.Cells[5].Text).ToString();

ActorClass.MoveDown(orderID,actorclassID);

if (Request.QueryString.Get("classID") != null)

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));

else

Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by orderID"));

break;

default:

// Do nothing.

break;

}

}

11. 为 DataGrid添加模板列,但是内容根据字段值来显示"链接",还是文本

以下三个都是,根据字段列不同,而显示内容及显示控件不同的处理代码.

<asp:TemplateColumn HeaderText="子菜单">

<ItemTemplate>

<%# ActorClassManage.hasLeaf(DataBinder.Eval(Container.DataItem,"ActorClassID").ToString(),DataBinder.Eval(Container.DataItem,"child").ToString())%>

</ItemTemplate>

</asp:TemplateColumn>

public static string hasLeaf(string id,string child)

{

string lRtn = "";

if (Int32.Parse(child) > 0)

lRtn="<a href='Actorclassmanage.aspx?classID="+id+"'><font color=blue>子菜单(" + child + ")</font></a>";

else

lRtn = "无子菜单";

return lRtn;

}

<asp:TemplateColumn HeaderText="属性">

<ItemTemplate>

<asp:LinkButton Text='<%# IsHidden(DataBinder.Eval(Container.DataItem,"ActorClassID").ToString(),(bool)DataBinder.Eval(Container.DataItem,"Enabled")) %>' runat="server" CommandName="hidden" ID="Linkbutton1"></asp:LinkButton>

</ItemTemplate>

</asp:TemplateColumn>

public static string IsHidden(string id,bool enabled)

{

string lRtn = "";

if (enabled == true)

{

lRtn = "[显示]";

}

else

{

lRtn = "隐藏";

}

return lRtn;

}

public static void Sort(string actorclassID, string orderID)

{

string temp = "";

if (Int32.Parse(BgPicManage.GetMaxCode("actorclass","orderID")) == Int32.Parse(orderID))

{

temp += "<ipnut type='submit' value='向下移'>";

}

if (Int32.Parse(orderID) == 0)

{

temp += "<ipnut type='submit' value='向上移'>";

}

}

12. DataGrid 控件自定义分页代码

将下列代码放于包含<DataGrid>的form中去,

<p style="FONT-SIZE:9pt" align="center">

<asp:label id="lblPageCount" runat="server"></asp:label>

<asp:label id="lblCurrentIndex" runat="server"></asp:label>

<asp:linkbutton id="btnFirst" onclick="PagerButtonClick" runat="server" Font-Name="verdana"

Font-size="8pt" ForeColor="navy" CommandArgument="0"></asp:linkbutton>

<asp:linkbutton id="btnPrev" onclick="PagerButtonClick" runat="server" Font-Name="verdana"

Font-size="8pt" ForeColor="navy" CommandArgument="prev"></asp:linkbutton>

<asp:linkbutton id="btnNext" onclick="PagerButtonClick" runat="server" Font-Name="verdana"

Font-size="8pt" ForeColor="navy" CommandArgument="next"></asp:linkbutton>

<asp:linkbutton id="btnLast" onclick="PagerButtonClick" runat="server" Font-Name="verdana"

Font-size="8pt" ForeColor="navy" CommandArgument="last"></asp:linkbutton>

</p>

后台代码

private void Page_Load(object sender, System.EventArgs e)

{

// 在此处放置用户代码以初始化页面

btnFirst.Text = "最首页";

btnPrev.Text = "前一页";

btnNext.Text = "下一页";

btnLast.Text = "最后页";

//绑定数据源

if (!Page.IsPostBack)

{

OpenDatabase();

BindGrid();

}

}

//用于显示"第几页,总*页"

private void ShowStats()

{

lblCurrentIndex.Text = "第 " + (MyDataGrid.CurrentPageIndex + 1).ToString() + " 页";

lblPageCount.Text = "总共 " + MyDataGrid.PageCount.ToString() + " 页";

}

//响应分页按钮

public void PagerButtonClick(object sender, EventArgs e)

{

string arg = ((LinkButton)sender).CommandArgument.ToString();

switch(arg)

{

case "next":

if (MyDataGrid.CurrentPageIndex < (MyDataGrid.PageCount - 1))

{

MyDataGrid.CurrentPageIndex += 1;

}

break;

case "prev":

if (MyDataGrid.CurrentPageIndex > 0)

{

MyDataGrid.CurrentPageIndex -= 1;

}

break;

case "last":

MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount - 1);

break;

default:

MyDataGrid.CurrentPageIndex = System.Convert.ToInt32(arg);

break;

}

BindGrid();

ShowStats();

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有