DataGrid的一点使用体会........
这个DataGrid实现的功能不算复杂.1.添加下拉框(老土了,不过比较详细);2.实现上下项的移动排序.(需要自己类的属性支持).
下面是DataGrid中一个包含下拉框的模板列
下面是如何获得这个下拉框,对其进行各种操作的代码:
DataGrid中各项排序:
![]()
aspx中的版面排序的模板列
对up和down的操作:
其中的order属性为Board的序列属性.
点击删除按钮,弹出确认对话框.
3.顺便补充一个:使DataGrid显示双层表头: 将下面的代码加入ItemDataBound事件中.(好像是SDK上的.)
if (e.Item.ItemType == ListItemType.Header)
{
e.Item.Cells[0].ColumnSpan = 2;
e.Item.Cells[0].Text = "大类1</td><td>大类2</td></tr><tr><td>" + e.Item.Cells[0].Text;
}
下面是DataGrid中一个包含下拉框的模板列
1 <asp:TemplateColumn HeaderText="修改">
2 <ItemTemplate>
3 <asp:DropDownList id="DropDownList1" Runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddl_SelectedIndexChanged">
4 <asp:ListItem Value="default" Selected="True">选择操作</asp:ListItem>
5 <asp:ListItem Value="edit">编辑版面</asp:ListItem>
6 <asp:ListItem Value="delete">删除版面</asp:ListItem>
7 <asp:ListItem Value="category">帖子类型</asp:ListItem>
8 </ItemTemplate>
9 </asp:TemplateColumn>
注意必须要加事件OnSelectedIndexChanged="ddl_SelectedIndexChanged"2 <ItemTemplate>
3 <asp:DropDownList id="DropDownList1" Runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddl_SelectedIndexChanged">
4 <asp:ListItem Value="default" Selected="True">选择操作</asp:ListItem>
5 <asp:ListItem Value="edit">编辑版面</asp:ListItem>
6 <asp:ListItem Value="delete">删除版面</asp:ListItem>
7 <asp:ListItem Value="category">帖子类型</asp:ListItem>
8 </ItemTemplate>
9 </asp:TemplateColumn>
下面是如何获得这个下拉框,对其进行各种操作的代码:
1
protected void ddl_SelectedIndexChanged(object sender, System.EventArgs e)
2
{
3
DropDownList ddl = (DropDownList)sender;
4
TableCell cell = (TableCell)ddl.Parent;
5
DataGridItem item = (DataGridItem)cell.Parent;
6
7
8
if ( ddl.SelectedItem.Value =="edit")
9
{
10
string url = "editboard" + int.Parse(item.Cells[0].Text) + ".aspx";
11
Response.Redirect( url );
12
}
13
}
14
//其余的项雷同"edit"
注意事件必须是protected或者public
protected void ddl_SelectedIndexChanged(object sender, System.EventArgs e) 2
{3
DropDownList ddl = (DropDownList)sender;4
TableCell cell = (TableCell)ddl.Parent;5
DataGridItem item = (DataGridItem)cell.Parent;6
7
8
if ( ddl.SelectedItem.Value =="edit")9
{10
string url = "editboard" + int.Parse(item.Cells[0].Text) + ".aspx";11
Response.Redirect( url );12
}13
}14
//其余的项雷同"edit"DataGrid中各项排序:

aspx中的版面排序的模板列
1
<asp:TemplateColumn HeaderText="版面排序">
2
<ItemTemplate>
3
<asp:LinkButton ID="up" Runat="server" CommandName="up">↑</asp:LinkButton>
4
<asp:LinkButton ID="down" Runat="server" CommandName="down">↓</asp:LinkButton>
5
</ItemTemplate>
6
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="版面排序">2
<ItemTemplate>3
<asp:LinkButton ID="up" Runat="server" CommandName="up">↑</asp:LinkButton>4
<asp:LinkButton ID="down" Runat="server" CommandName="down">↓</asp:LinkButton>5
</ItemTemplate>6
</asp:TemplateColumn>对up和down的操作:
1![]()
2
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
3
{case "up":
4![]()
5
if (e.Item.ItemIndex - 1 < 0)
6
return;
7
else
8
{
9
10
Board b1 = ForumManager.GetBoard(int.Parse(e.Item.Cells[0].Text));
11
Board b0 = ForumManager.GetBoard(int.Parse(DataGrid1.Items[e.Item.ItemIndex - 1].Cells[0].Text));
12
int b1Order = b1.Board_Order;
13
int b0Order = b0.Board_Order;
14
b1.Board_Order = b0Order;
15
b0.Board_Order = b1Order;
16
b1.Update();
17
b0.Update();
18
BindData(b1.Board_Id);
19
}
20
break;
21![]()
22
case "down":
23
if (e.Item.ItemIndex > this.total )
24
return;
25
else
26
{
27![]()
28
Board b3 = ForumManager.GetBoard(int.Parse(e.Item.Cells[0].Text));
29
Board b2 = ForumManager.GetBoard(int.Parse(DataGrid1.Items[e.Item.ItemIndex + 1].Cells[0].Text));
30
int b3Order = b3.Board_Order;
31
int b2Order = b2.Board_Order;
32
b3.Board_Order = b2Order;
33
b2.Board_Order = b3Order;
34
b3.Update();
35
b2.Update();
36
BindData( b3.Board_Id);
37
}
38
break;

2
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)3
{case "up":4

5
if (e.Item.ItemIndex - 1 < 0)6
return;7
else8
{9
10
Board b1 = ForumManager.GetBoard(int.Parse(e.Item.Cells[0].Text));11
Board b0 = ForumManager.GetBoard(int.Parse(DataGrid1.Items[e.Item.ItemIndex - 1].Cells[0].Text));12
int b1Order = b1.Board_Order; 13
int b0Order = b0.Board_Order;14
b1.Board_Order = b0Order;15
b0.Board_Order = b1Order;16
b1.Update();17
b0.Update();18
BindData(b1.Board_Id);19
}20
break;21

22
case "down":23
if (e.Item.ItemIndex > this.total )24
return;25
else26
{27

28
Board b3 = ForumManager.GetBoard(int.Parse(e.Item.Cells[0].Text));29
Board b2 = ForumManager.GetBoard(int.Parse(DataGrid1.Items[e.Item.ItemIndex + 1].Cells[0].Text));30
int b3Order = b3.Board_Order; 31
int b2Order = b2.Board_Order;32
b3.Board_Order = b2Order;33
b2.Board_Order = b3Order;34
b3.Update();35
b2.Update();36
BindData( b3.Board_Id);37
}38
break;其中的order属性为Board的序列属性.
点击删除按钮,弹出确认对话框.
1
private void DataGrid2_ItemCreated(object sender, DataGridItemEventArgs e)
2
{
3
if ( e.Item.ItemType == ListItemType.EditItem || e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
4
{
5
LinkButton lb = (LinkButton) e.Item.Cells[3].Controls[0];
6
if ( lb != null )
7
lb.Attributes.Add("onclick", "return confirm('确实要删除么?')");
private void DataGrid2_ItemCreated(object sender, DataGridItemEventArgs e)2
{3
if ( e.Item.ItemType == ListItemType.EditItem || e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )4
{5
LinkButton lb = (LinkButton) e.Item.Cells[3].Controls[0];6
if ( lb != null )7
lb.Attributes.Add("onclick", "return confirm('确实要删除么?')");3.顺便补充一个:使DataGrid显示双层表头: 将下面的代码加入ItemDataBound事件中.(好像是SDK上的.)
if (e.Item.ItemType == ListItemType.Header)
{
e.Item.Cells[0].ColumnSpan = 2;
e.Item.Cells[0].Text = "大类1</td><td>大类2</td></tr><tr><td>" + e.Item.Cells[0].Text;
}

浙公网安备 33010602011771号