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='#c8***'");
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='white'");
}
else if (e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#c8***'");
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" οnclick="PagerButtonClick" runat="server" Font-Name="verdana"
Font-size="8pt" ForeColor="navy" CommandArgument="0"></asp:linkbutton>
<asp:linkbutton id="btnPrev" οnclick="PagerButtonClick" runat="server" Font-Name="verdana"
Font-size="8pt" ForeColor="navy" CommandArgument="prev"></asp:linkbutton>
<asp:linkbutton id="btnNext" οnclick="PagerButtonClick" runat="server" Font-Name="verdana"
Font-size="8pt" ForeColor="navy" CommandArgument="next"></asp:linkbutton>
<asp:linkbutton id="btnLast" οnclick="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();
}