分享
 
 
 

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

王朝c#·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

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- 王朝網路 版權所有