DataGrid 功能实现收集(转)保留做参考
生活随笔
收集整理的這篇文章主要介紹了
DataGrid 功能实现收集(转)保留做参考
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DataGrid相鄰行有相同內容時對指定列合并 /**////?<summary>
///?DataGrid相鄰行有相同內容時對指定列合并
///?</summary>
///?<param?name="spangrid">格式化的DataGrid的ID</param>
///?<param?name="spancell">要合并的列</param>????????
///?<param?name="spanby">合并所依據數據的列</param>
????public?void?FormatGrid(DataGrid?spangrid,int?spancell,int?spanby)
????{
??????if(spanby<0?||?spanby>spangrid.Items.Count)
??????????return;
??????????int?rowspan?=?1;
??????????for(int?i?=?1;i<spangrid.Items.Count;i++)
?????????{
????????if(spangrid.Items[i].Cells[spanby].Text?==?spangrid.Items[i-1].Cells[spanby].Text)
????????????{
????????????????
???????????????rowspan?+=1;
???????????????spangrid.Items[i].Cells[spancell].Visible?=?false;
???????????????spangrid.Items[i-rowspan+1].Cells[spancell].RowSpan?=?rowspan;
????????????}
????????else
????????{????
???????????string?str?=?spangrid.Items[i].Cells[spanby].Text;
???????????string?str1?=?spangrid.Items[i-1].Cells[spanby].Text;
???????????rowspan?=?1;
????????}????
??????????????}
????}?
datagrid加checkbox實現分頁不丟失選擇的記錄 namespace?checkboc_page
{
?/**////?<summary>
?///?WebForm1?的摘要說明。
?///?</summary>
?public?class?WebForm1?:?System.Web.UI.Page
?{
??protected?System.Web.UI.WebControls.Button?Button1;
??protected?System.Web.UI.WebControls.DataGrid?DataGrid1;
?
??private?void?Page_Load(object?sender,?System.EventArgs?e)
??{
???if(!Page.IsPostBack)
???{
????show();
???}
??}
??private?void?show()
??{
???string?conn?=??ConfigurationSettings.AppSettings.Get("Connstring");
???DataSet?ds?=?new?DataSet();
???using(??SqlConnection?con?=?new?SqlConnection(conn))
???{
????con.Open();
????SqlCommand?comm?=?new?SqlCommand();
????SqlDataAdapter?da?=new?SqlDataAdapter();
?????
????da.SelectCommand?=?new?SqlCommand();
????da.SelectCommand.Connection?=?con;
????da.SelectCommand.CommandText?=?"select?*?from?Orders";
????da.SelectCommand.CommandType?=?CommandType.Text;
?????
????da.Fill(ds);
????????????
???
?????
???}
???this.DataGrid1.DataSource?=?ds.Tables[0];
???
???this.DataGrid1.DataBind();
?????????????
???if(Session["userlist"]!=null)
???{
????Hashtable?ht?=(Hashtable)?Session["userlist"];
????if(ht!=null)
????{
?????for(int?i?=?0?;i<DataGrid1.Items.Count?;i++)
?????{
??????if?(ht.ContainsKey(DataGrid1.Items[i].Cells[0].Text.ToString().Trim()))
???????(DataGrid1.Items[i].Cells[2].FindControl("CheckBox1")?as?CheckBox).Checked?=?true;
?????}
????}
???}
??}
??private?void?check()
??{
???Hashtable?ht?=?new?Hashtable();
???if(Session["userlist"]!=null)
???{
????ht?=(Hashtable)?Session["userlist"];
????if(ht!=null)
????{
?????for(int?i?=?0?;i<DataGrid1.Items.Count?;i++)
?????{
??????if?(?(DataGrid1.Items[i].Cells[2].FindControl("CheckBox1")?as?CheckBox).Checked)
??????{
???????if?(!?ht.ContainsKey(DataGrid1.Items[i].Cells[0].Text.ToString().Trim()))
???????{
????????ht.Add(DataGrid1.Items[i].Cells[0].Text.ToString().Trim(),DataGrid1.Items[i].Cells[1].Text.ToString().Trim());
???????}
??????}
??????else
??????{
???????if?(?ht.ContainsKey(DataGrid1.Items[i].Cells[0].Text.ToString().Trim()))
???????{
????????ht.Remove(DataGrid1.Items[i].Cells[0].Text.ToString().Trim());
???????}
??????}
?????}
????}
???}
???else
???{
????for(int?i?=?0?;i<DataGrid1.Items.Count?;i++)
????{
?????if?(?(DataGrid1.Items[i].Cells[2].FindControl("CheckBox1")?as?CheckBox).Checked)
?????{
??????ht.Add(DataGrid1.Items[i].Cells[0].Text.ToString().Trim(),DataGrid1.Items[i].Cells[1].Text.ToString().Trim());
?????}
????}
???}
???Session["userlist"]?=?ht;
??}
??Web?窗體設計器生成的代碼#region?Web?窗體設計器生成的代碼
??override?protected?void?OnInit(EventArgs?e)
??{
???//
???//?CODEGEN:?該調用是?ASP.NET?Web?窗體設計器所必需的。
???//
???InitializeComponent();
???base.OnInit(e);
??}
??
??/**////?<summary>
??///?設計器支持所需的方法?-?不要使用代碼編輯器修改
??///?此方法的內容。
??///?</summary>
??private?void?InitializeComponent()
??{????
???this.DataGrid1.PageIndexChanged?+=?new?System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
???this.Button1.Click?+=?new?System.EventHandler(this.Button1_Click);
???this.Load?+=?new?System.EventHandler(this.Page_Load);
??}
??#endregion
??private?void?DataGrid1_PageIndexChanged(object?source,?System.Web.UI.WebControls.DataGridPageChangedEventArgs?e)
??{
???check();
???
???DataGrid1.CurrentPageIndex?=?e.NewPageIndex;
???show();
??}
??private?void?Button1_Click(object?sender,?System.EventArgs?e)
??{
????
???
?????????????check();
???Hashtable?ht?=?(Hashtable)Session["userlist"];
????
????foreach?(DictionaryEntry?objDE?in?ht)
????{
?????Response.Write(objDE.Value.ToString());
??????
????}
????
??}
?}
}
DataGrid中添加刪除確認對話框 多種實現 在DataGrid的使用中,經常需要為刪除按紐添加確認對話框,根據我的學習經驗,總結了三種方法,原理都是在客戶端為刪除按紐添加腳本代碼來實現刪除前彈出確認對話框。
方法一:
當為DataGrid控件添加刪除按紐后,為DataGrid控件添加ItemDataBound事件處理程序,代碼如下:
//添加刪除確認對話框。
???switch(e.Item.ItemType)
???{
????case?ListItemType.Item:
????case?ListItemType.EditItem:
????case?ListItemType.AlternatingItem:
?????((LinkButton)e.Item.Cells[4].Controls[0]).Attributes.Add("onclick","return?confirm('你真的要刪除第"+(e.Item.ItemIndex+1).ToString()+"行嗎?');");
?????break;
???}
其中,e.Item.Cells[4]說明你添加的刪除按紐在DataGrid控件中位于第五列,列號從0開始。
方法二:使用模板列
1.為DataGrid添加一個模板列,名為“自定義刪除”,在這個模板列中添加一個按紐,將按紐的CommandName屬性設為UserDelete;
2.為DataGrid添加ItemCreated事件,添加客戶端腳本程序,代碼如下:
switch(e.Item.ItemType)
???{
????case?ListItemType.Item:
????case?ListItemType.EditItem:
????case?ListItemType.AlternatingItem:
?????Button?myDelButton?=?(Button)e.Item.FindControl("btnDelete");
?????myDelButton.Attributes.Add("onclick","return?confirm('你真的要刪除第"+(e.Item.ItemIndex+1).ToString()+"行嗎?');");
?????break;
???}
3.為DataGrid添加ItemCommand事件,處理刪除事件,代碼如下:
if(e.CommandName?==?"UserDelete")
???{
???? //執行刪除。
???}
方法三:
這種方法很少見到人用,但卻是最簡單的方法,方法如下:
將DataGrid的刪除按紐的文本屬性設為如下代碼:
<div?id=d?onclick="JavaScript:return?confirm('你真的要刪除這一行嗎?');">刪除</div>
使用RenderMethod 委托實現DataGrid表頭合并
1using?System;
??2using?System.Collections;
??3using?System.ComponentModel;
??4using?System.Data;
??5using?System.Drawing;
??6using?System.Web;
??7using?System.Web.SessionState;
??8using?System.Web.UI;
??9using?System.Web.UI.WebControls;
?10using?System.Web.UI.HtmlControls;
?11using?System.Data.SqlClient;
?12
?13namespace?WebDataGridHeader
?14{
?15????/**//**//**////?<summary>
?16????/**////DataGrid表頭合并問題
?17????/**////?</summary>
?18????public?class?WebForm1?:?System.Web.UI.Page
?19????{
?20????????protected?System.Web.UI.WebControls.DataGrid?DataGrid1;
?21????????protected?System.Web.UI.WebControls.Label?Label1;
?22????
?23????????private?void?Page_Load(object?sender,?System.EventArgs?e)
?24????????{
?25????????????//?在此處放置用戶代碼以初始化頁面
?26????????????string?m_strConn?=?"server=.;uid=sa;pwd=sa;database=Northwind";
?27????????????SqlConnection?conn?=?new?SqlConnection(m_strConn);
?28????????????
?29????????????try
?30????????????{
?31????????????????conn.Open();
?32
?33????????????????SqlCommand?cmd?=?new?SqlCommand("SELECT?*?FROM?Employees",conn);
?34????????????
?35????????????????SqlDataAdapter?adp?=?new?SqlDataAdapter(cmd);
?36
?37????????????????DataTable?dt?=?new?DataTable();
?38????????????????adp.Fill(dt);
?39
?40????????????????this.DataGrid1.DataSource?=?dt;
?41????????????????this.DataGrid1.DataBind();
?42????????????}
?43????????????catch(Exception?ex)
?44????????????{
?45????????????????throw?ex;
?46????????????}
?47????????????finally
?48????????????{
?49????????????????conn.Close();
?50????????????}
?51????????}
?52
?53????????Web?窗體設計器生成的代碼Web?窗體設計器生成的代碼#region?Web?窗體設計器生成的代碼
?54????????override?protected?void?OnInit(EventArgs?e)
?55????????{
?56????????????//
?57????????????//?CODEGEN:?該調用是?ASP.NET?Web?窗體設計器所必需的。
?58????????????//
?59????????????InitializeComponent();
?60????????????base.OnInit(e);
?61????????}
?62????????
?63????????/**//**//**////?<summary>
?64????????/**////?設計器支持所需的方法?-?不要使用代碼編輯器修改
?65????????/**////?此方法的內容。
?66????????/**////?</summary>
?67????????private?void?InitializeComponent()
?68????????{????
?69????????????this.DataGrid1.ItemCreated?+=?new?System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemCreated);
?70????????????this.Load?+=?new?System.EventHandler(this.Page_Load);
?71
?72????????}
?73????????#endregion
?74????????
?75????????/**//**//**////?<summary>
?76????????/**////?創建Item
?77????????/**////?</summary>
?78????????/**////?<param?name="sender"></param>
?79????????/**////?<param?name="e"></param>
?80????????private?void?DataGrid1_ItemCreated(object?sender,?System.Web.UI.WebControls.DataGridItemEventArgs?e)
?81????????{
?82????????????//將Item的呈現方法定向到自定義的呈現方法上
?83????????????ListItemType?lit?=?e.Item.ItemType;
?84????????????if(ListItemType.Header?==?lit)
?85????????????{
?86????????????????e.Item.SetRenderMethodDelegate(new?RenderMethod(NewRenderMethod));
?87????????????}
?88????????}
?89????????
?90????????/**//**//**////?<summary>
?91????????/**////?自定義的Item呈現方法
?92????????/**////?</summary>
?93????????/**////?<param?name="writer"></param>
?94????????/**////?<param?name="ctl"></param>
?95????????private?void?NewRenderMethod(HtmlTextWriter?writer,Control?ctl)
?96????????{
?97????????????//不需要從<TR>標簽開始
?98????????????//輸出“聯系電話”列
?99????????????writer.Write("<TD?colspan=\"3\"?align=\"center\">聯系電話</TD>\n");
100
101????????????//“地址”列必須有rowspan屬性且必須在第一列呈現
102????????????TableCell?cell?=?(TableCell)ctl.Controls[ctl.Controls.Count?-?1];
103????????????cell.Attributes.Add("rowspan","2");
104????????????cell.RenderControl(writer);
105
106????????????//現在關閉第一行
107????????????writer.Write("</TR>\n");
108
109????????????//將設計時的樣式屬性添加到第二行使得兩行的外觀相似
110????????????this.DataGrid1.HeaderStyle.AddAttributesToRender(writer);
111
112????????????//插入第二行
113????????????writer.RenderBeginTag("TR");
114
115????????????//呈現除了最后一列(剛才已經呈現過了)外的所有在設計時定義的cells
116????????????for(int?i=0;i<=ctl.Controls.Count-2;i++)
117????????????{
118????????????????ctl.Controls[i].RenderControl(writer);
119????????????}
120
121????????????//不需要以</TR>結束
122????????}
123????}
124}?
測試例子中的DataGrid選擇了Employees表中的四個字段?
代碼如下:?
<asp:DataGrid?id="DataGrid1"?runat="server"?Width="793px"?Height="296px"?AutoGenerateColumns="False"?
BorderColor="#CC9966"?BorderStyle="None"?BorderWidth="1px"?BackColor="White"?CellPadding="4">?
<SelectedItemStyle?Font-Bold="True"?ForeColor="#663399"?BackColor="#FFCC66"></SelectedItemStyle>?
<ItemStyle?ForeColor="#330099"?BackColor="White"></ItemStyle>?
<HeaderStyle?Font-Bold="True"?ForeColor="#FFFFCC"?BackColor="#990000"></HeaderStyle>?
<FooterStyle?ForeColor="#330099"?BackColor="#FFFFCC"></FooterStyle>?
<Columns>?
<asp:BoundColumn?DataField="LastName"?HeaderText="辦公電話"></asp:BoundColumn>?
<asp:BoundColumn?DataField="FirstName"?HeaderText="住宅電話"></asp:BoundColumn>?
<asp:BoundColumn?DataField="HomePhone"?HeaderText="移動電話"></asp:BoundColumn>?
<asp:BoundColumn?DataField="Address"?HeaderText="聯系地址"></asp:BoundColumn>?
</Columns>?
<PagerStyle?HorizontalAlign="Center"?ForeColor="#330099"?BackColor="#FFFFCC"></PagerStyle>?
</asp:DataGrid>DataGrid中使用CheckBox的CheckedChanged事件
使用DataGrid的過程中常會用到CheckBox控件,并使用它的CheckedChanged事件。使用如下:
1、CheckBox控件需要設置AutoPostBack="true"
<asp:CheckBox?id="chbIsActive"?runat="server"?AutoPostBack="true"></asp:CheckBox>
2、CheckBox控件的事件須在DataGrid的ItemCreated定義才能生效
????????private?void?grdStructure_ItemCreated(object?sender,?System.Web.UI.WebControls.DataGridItemEventArgs?e)
????????{
????????????if(e.Item.ItemType?==?ListItemType.Item?||?e.Item.ItemType?==?ListItemType.AlternatingItem)
????????????{
????????????????
????????????????CheckBox?chbIsActive?=?e.Item.FindControl("chbIsActive")?as?CheckBox;
????????????????chbIsActive.CheckedChanged?+=?new?EventHandler(chbIsActive_CheckedChanged);
????????????}
????????}
3、編寫事件代碼
????????private?void?chbIsActive_CheckedChanged(object?sender,?EventArgs?e)
????????{
????????????CheckBox?chbIsActive?=?(CheckBox)sender;
????????????Guid?structureUID?=?new?Guid(chbIsActive.Attributes["StructureUID"]);
????????????bool?isActive?=?chbIsActive.Checked;
????????????IPMStructureManager?manager?=?PMStructureManagerFactory.GetInstance();
????????????manager.SetActive(structureUID,?isActive);
????????????this.Binding();
????????}
在DataGrid中添加一個合計字段 你是否花了很時間來閱讀?ASPNG?列表?如果不是的話,我非常推薦它。你可以訪問
http://www.asp.net/?或?http://www.asplists.com/asplists/aspngevery.asp。最近的最常見的一個問題是:“?我怎樣在?DataGrid?中顯示列合計?”。?我親自多次為這個問題提供了示例代碼,因此,我想在DotNetJunkies?的標題中提供這么一份指南。?在這份指南中你將會學到怎樣在?DataGrid?中編程實現對某一列的值進行統計,并在?DataGrid?的頁腳中顯示其合計值。這份指南中供下載的示例中包括了?C#?和?Visual?Basic.NET?兩種代碼。
?
上面所用到的屏幕圖片中的?DataGrid?是一個非常典型的?DataGrid?。有許多控制?DataGrid?外觀的屬性,它使用兩個?BoundColumns?來操作數據,但這并不是最重要的。做好這項工作真正重要的是使用?DataGrid.OnItemDataBound?事件。這個事件將會觸發每次綁定一條記錄到?DataGrid。你可以為這個事件創建一個事件處理,以操作數據記錄。在這種情況下,你將會得到運行時?Price?列的合計值。
頁腳指的是數據范圍的最后一行。當這行被限定時,在事件句處理你可以得到?Price?列的運行時統計值。
實施:
首先讓我們找到一種方法來操作?Web?窗體輸出。?這份指南中,你將使用一個?Web?窗體?(calcTotals.aspx)?以及一個類代碼文件?(calcTotals.aspx.cs)。這份指南的意圖是,?類代碼將會使用?Just-In-Time?編譯器來編譯。?這里是?calcTotals.aspx?的代碼:
<%@?Page?Inherits="myApp.calcTotals"?Src="20010731T0101.aspx.cs"?%>
<html>
<body?bgcolor="white">
<asp:DataGrid?id="MyGrid"?runat="server"
??AutoGenerateColumns="False"
??CellPadding="4"?CellSpacing="0"
??BorderStyle="Solid"?BorderWidth="1"
??Gridlines="None"?BorderColor="Black"
??ItemStyle-Font-Name="Verdana"
??ItemStyle-Font-Size="9pt"
??HeaderStyle-Font-Name="Verdana"
??HeaderStyle-Font-Size="10pt"
??HeaderStyle-Font-Bold="True"
??HeaderStyle-ForeColor="White"
??HeaderStyle-BackColor="Blue"
??FooterStyle-Font-Name="Verdana"
??FooterStyle-Font-Size="10pt"
??FooterStyle-Font-Bold="True"
??FooterStyle-ForeColor="White"
??FooterStyle-BackColor="Blue"
??OnItemDataBound="MyDataGrid_ItemDataBound"
??ShowFooter="True">
??<Columns>
????<asp:BoundColumn?HeaderText="Title"?DataField="title"?/>
????<asp:BoundColumn?HeaderText="Price"?DataField="price"
??????ItemStyle-HorizontalAlign="Right"
??????HeaderStyle-HorizontalAlign="Center"?/>
???</Columns>
</asp:DataGrid>
</body>
</html>?
在?Web?窗體中你使用?@?Page?來直接聲明這個頁所繼承的類代碼。SRC?屬性指明了類代碼將使用?JIT?編譯器來編譯。?Web?窗體中的大部分代碼樣式聲明用來使?DataGrid?外觀變得更好看。
最后指定的屬性之一是?OnItemDataBound?屬性。這個事件將會在?OnItemDataBound?事件發生時被觸發。
Web?窗體中的?DataGrid?(MyGrid)?包含有兩個?BoundColumns,一個是?Title?,另一個是Price。?這里將顯示?Pubs?數據庫(SQL?Server)中?Titles?表的?title?及?price?列。
忽略代碼的定義
類代碼在所有的地方都將使用。在類代碼中,你可以操作兩個事件:Page_Load?事件以及?MyGrid_OnItemDataBound?事件。還有一個私有方法?CalcTotal,?用它來簡單的完成運行時統計的數學運算。
類代碼基本結構塊的起始部分:
using?System;
using?System.Web;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Web.UI.HtmlControls;
using?System.Data;
using?System.Data.SqlClient;
namespace?myApp
{
??public?class?calcTotals?:?Page
??{
????protected?DataGrid?MyGrid;
????private?double?runningTotal?=?0;
??}
}?
在類代碼的基本結構中,你必須使用相關語句導入名字空間(namespace)。在類聲明中,你聲明了兩個變量,一個是類代碼中映射?Web?窗體的?DataGrid(MyGrid)控件的變量;一個是用來操作?DataGrid?的?Price?列中運行時統計的雙精度值。?
Page_Load?事件
在?Page_Load?事件中,你所要做的就是連接到?SQL?Server?并執行一個簡單的?SqlCommand。?你取得了所有?Price?值>0?的?title?和?price?數據。你使用?SqlCommand.ExecuteReader?方法返回一個?SqlDataReader?并將其直接綁定到?DataGrid?(MyGrid)。
protected?void?Page_Load(object?sender,?EventArgs?e)
{
??SqlConnection?myConnection?=?new?SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");//創建SQL連接
??SqlCommand?myCommand?=?new?SqlCommand("SELECT?title,?price?FROM?Titles?WHERE?price?>?0",?myConnection);//創建SQL命令
??try
??{
????myConnection.Open();//打開數據庫連接
????MyGrid.DataSource?=?myCommand.ExecuteReader();//指定?DataGrid?的數據源
????MyGrid.DataBind();//綁定數據到?DataGrid
????myConnection.Close();//關閉數據連接
??}
??catch(Exception?ex)
??{
????//捕獲錯誤
????HttpContext.Current.Response.Write(ex.ToString());
??}
}
?
CalcTotals?方法
CalcTotals?方法用來處理?runningTotal?變量。這個值將以字符串形式來傳遞。?你需要將它解析為雙精度型,然后?runningTotal?變量就成了雙精度類型。
private?void?CalcTotal(string?_price)
{
??try
??{
????runningTotal?+=?Double.Parse(_price);
??}
??catch
??{
?????//捕獲錯誤
??}
}
?
MyGrid_ItemDataBound?事件
MyGrid_ItemDataBound?事件在數據源中每行綁定到?DataGrid?時被調用。在這個事件處理中,你可以處理每一行數據。?這里你的目的是,你將需要調用?CalcTotals?方法并從?Price?列傳遞文本,并用金額型格式化每一行的?Price?列,?并在頁腳行中顯示?runningTotal?的值。
public?void?MyDataGrid_ItemDataBound(object?sender,?DataGridItemEventArgs?e)
{
??if?(e.Item.ItemType?==?ListItemType.Item?||?e.Item.ItemType?==?ListItemType.AlternatingItem)
??{
????CalcTotal(?e.Item.Cells[1].Text?);
????e.Item.Cells[1].Text?=?string.Format("{0:c}",?Convert.ToDouble(e.Item.Cells[1].Text));
??}
??else?if(e.Item.ItemType?==?ListItemType.Footer?)
??{
????e.Item.Cells[0].Text="Total";
????e.Item.Cells[1].Text?=?string.Format("{0:c}",?runningTotal);
??}
}
?
在?MyGrid_ItemDataBound?事件句柄中,首先你得使用?ListItemType?判斷當前的?DataGridItem?是一個數據項還是AlternatingItem?行。如果是數據項,你調用?CalcTotals,并將?Price?列的值作為參數傳遞給它;然后你以金額格式對?Price?列進行格式化及著色。
如果?DataGridItem?是頁腳,可以用金額格式顯示?runningTotal。
總結
在這份指南中,你學到了怎樣使用?DataGrid.OnItemDataBound?事件來實現運行時對DataGrid?的某一列進行統計。使用這個事件,你可以創建一個列的合計并可對DataGrid行的頁腳進行著色。?
使用DataGrid動態綁定DropDownList 簡單的使用模板列綁定DropDownList,初學者想必都會了,但有時候,我們要做的就是在編輯的時候想讓某一列定制為DropDownList,并且根據正常情況下顯示的值自動變換DropDownList中所選的值,然后保存選擇后的值到數據庫或XML文件,其實要做到這樣的功能并不難,只要我們學會使用DataGrid的DataGrid1_ItemDataBound事件就行了,跟我來做個例子。
//檢索數據庫的函數
public?DataSet?GetZcbd()
{
try
{
DataSet?ds=new?DataSet();?
string?searchString="select?id,yy,bj?from?zc";
da=new?OleDbDataAdapter(searchString,conn);
da.Fill(ds,"yy");?
return?ds;
}
catch
{
return?null;?
}?
}
//綁定DataGrid?
private?void?BindGrid()
{
DataSet?ds?=?new?DataSet();
ds?=?us.GetZcbd();
if?(ds!=null)
{
this.DataGrid1.DataSource?=?ds;
this.DataGrid1.DataBind();
}
else
{
msg.Alert("加載數據錯誤!",Page);
}
}
綁定好DataGrid以后,設定模板列,讓其正常顯示下為Label,并綁定為數據庫中一ID值,在編輯狀態下為DropDownList,并綁定為數據庫中一Name值,我們現在要做的就是當我們選擇編輯時根據Label的值自動從數據庫中取出編號為ID值的姓名,并用DropDownList默認選中。(注釋:為了方便大家學習,我給出一個簡單代碼的例子,供大家參考)
private?void?DataGrid1_ItemDataBound(object?sender,?System.Web.UI.WebControls.DataGridItemEventArgs?e)
{
if?(e.Item.ItemType?==?ListItemType.EditItem)
{
DataRowView?drv?=?(DataRowView)e.Item.DataItem;
string?current?=?drv["label1"].ToString();
DropDownList?ddl?=?(DropDownList)e.Item.FindControl("ddl");
ddl.SelectedIndex?=?ddl.Items.IndexOf(ddl.Items.FindByValue(current));
}
if?((e.Item.ItemType?==?ListItemType.Item)||(e.Item.ItemType?==?ListItemType.AlternatingItem))?
{
Label?t?=?(System.Web.UI.WebControls.Label)e.Item.FindControl("label1");
string?current?=?this.BindDDL(int.Parse(t.Text));
e.Item.Cells[1].Text?=?current;
}
}
private?string?BindDDL(int?ddd)
{
string?sss?=?"";
if?(ddd==1)
{
sss="張三";
return?sss;
}
else
{
sss="李四";
return?sss;
}
}
注釋:msg為一個類似WinForm的messagebox對話框,不必理會。可以使用label.Text代替
///?DataGrid相鄰行有相同內容時對指定列合并
///?</summary>
///?<param?name="spangrid">格式化的DataGrid的ID</param>
///?<param?name="spancell">要合并的列</param>????????
///?<param?name="spanby">合并所依據數據的列</param>
????public?void?FormatGrid(DataGrid?spangrid,int?spancell,int?spanby)
????{
??????if(spanby<0?||?spanby>spangrid.Items.Count)
??????????return;
??????????int?rowspan?=?1;
??????????for(int?i?=?1;i<spangrid.Items.Count;i++)
?????????{
????????if(spangrid.Items[i].Cells[spanby].Text?==?spangrid.Items[i-1].Cells[spanby].Text)
????????????{
????????????????
???????????????rowspan?+=1;
???????????????spangrid.Items[i].Cells[spancell].Visible?=?false;
???????????????spangrid.Items[i-rowspan+1].Cells[spancell].RowSpan?=?rowspan;
????????????}
????????else
????????{????
???????????string?str?=?spangrid.Items[i].Cells[spanby].Text;
???????????string?str1?=?spangrid.Items[i-1].Cells[spanby].Text;
???????????rowspan?=?1;
????????}????
??????????????}
????}?
datagrid加checkbox實現分頁不丟失選擇的記錄 namespace?checkboc_page
{
?/**////?<summary>
?///?WebForm1?的摘要說明。
?///?</summary>
?public?class?WebForm1?:?System.Web.UI.Page
?{
??protected?System.Web.UI.WebControls.Button?Button1;
??protected?System.Web.UI.WebControls.DataGrid?DataGrid1;
?
??private?void?Page_Load(object?sender,?System.EventArgs?e)
??{
???if(!Page.IsPostBack)
???{
????show();
???}
??}
??private?void?show()
??{
???string?conn?=??ConfigurationSettings.AppSettings.Get("Connstring");
???DataSet?ds?=?new?DataSet();
???using(??SqlConnection?con?=?new?SqlConnection(conn))
???{
????con.Open();
????SqlCommand?comm?=?new?SqlCommand();
????SqlDataAdapter?da?=new?SqlDataAdapter();
?????
????da.SelectCommand?=?new?SqlCommand();
????da.SelectCommand.Connection?=?con;
????da.SelectCommand.CommandText?=?"select?*?from?Orders";
????da.SelectCommand.CommandType?=?CommandType.Text;
?????
????da.Fill(ds);
????????????
???
?????
???}
???this.DataGrid1.DataSource?=?ds.Tables[0];
???
???this.DataGrid1.DataBind();
?????????????
???if(Session["userlist"]!=null)
???{
????Hashtable?ht?=(Hashtable)?Session["userlist"];
????if(ht!=null)
????{
?????for(int?i?=?0?;i<DataGrid1.Items.Count?;i++)
?????{
??????if?(ht.ContainsKey(DataGrid1.Items[i].Cells[0].Text.ToString().Trim()))
???????(DataGrid1.Items[i].Cells[2].FindControl("CheckBox1")?as?CheckBox).Checked?=?true;
?????}
????}
???}
??}
??private?void?check()
??{
???Hashtable?ht?=?new?Hashtable();
???if(Session["userlist"]!=null)
???{
????ht?=(Hashtable)?Session["userlist"];
????if(ht!=null)
????{
?????for(int?i?=?0?;i<DataGrid1.Items.Count?;i++)
?????{
??????if?(?(DataGrid1.Items[i].Cells[2].FindControl("CheckBox1")?as?CheckBox).Checked)
??????{
???????if?(!?ht.ContainsKey(DataGrid1.Items[i].Cells[0].Text.ToString().Trim()))
???????{
????????ht.Add(DataGrid1.Items[i].Cells[0].Text.ToString().Trim(),DataGrid1.Items[i].Cells[1].Text.ToString().Trim());
???????}
??????}
??????else
??????{
???????if?(?ht.ContainsKey(DataGrid1.Items[i].Cells[0].Text.ToString().Trim()))
???????{
????????ht.Remove(DataGrid1.Items[i].Cells[0].Text.ToString().Trim());
???????}
??????}
?????}
????}
???}
???else
???{
????for(int?i?=?0?;i<DataGrid1.Items.Count?;i++)
????{
?????if?(?(DataGrid1.Items[i].Cells[2].FindControl("CheckBox1")?as?CheckBox).Checked)
?????{
??????ht.Add(DataGrid1.Items[i].Cells[0].Text.ToString().Trim(),DataGrid1.Items[i].Cells[1].Text.ToString().Trim());
?????}
????}
???}
???Session["userlist"]?=?ht;
??}
??Web?窗體設計器生成的代碼#region?Web?窗體設計器生成的代碼
??override?protected?void?OnInit(EventArgs?e)
??{
???//
???//?CODEGEN:?該調用是?ASP.NET?Web?窗體設計器所必需的。
???//
???InitializeComponent();
???base.OnInit(e);
??}
??
??/**////?<summary>
??///?設計器支持所需的方法?-?不要使用代碼編輯器修改
??///?此方法的內容。
??///?</summary>
??private?void?InitializeComponent()
??{????
???this.DataGrid1.PageIndexChanged?+=?new?System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
???this.Button1.Click?+=?new?System.EventHandler(this.Button1_Click);
???this.Load?+=?new?System.EventHandler(this.Page_Load);
??}
??#endregion
??private?void?DataGrid1_PageIndexChanged(object?source,?System.Web.UI.WebControls.DataGridPageChangedEventArgs?e)
??{
???check();
???
???DataGrid1.CurrentPageIndex?=?e.NewPageIndex;
???show();
??}
??private?void?Button1_Click(object?sender,?System.EventArgs?e)
??{
????
???
?????????????check();
???Hashtable?ht?=?(Hashtable)Session["userlist"];
????
????foreach?(DictionaryEntry?objDE?in?ht)
????{
?????Response.Write(objDE.Value.ToString());
??????
????}
????
??}
?}
}
DataGrid中添加刪除確認對話框 多種實現 在DataGrid的使用中,經常需要為刪除按紐添加確認對話框,根據我的學習經驗,總結了三種方法,原理都是在客戶端為刪除按紐添加腳本代碼來實現刪除前彈出確認對話框。
方法一:
當為DataGrid控件添加刪除按紐后,為DataGrid控件添加ItemDataBound事件處理程序,代碼如下:
//添加刪除確認對話框。
???switch(e.Item.ItemType)
???{
????case?ListItemType.Item:
????case?ListItemType.EditItem:
????case?ListItemType.AlternatingItem:
?????((LinkButton)e.Item.Cells[4].Controls[0]).Attributes.Add("onclick","return?confirm('你真的要刪除第"+(e.Item.ItemIndex+1).ToString()+"行嗎?');");
?????break;
???}
其中,e.Item.Cells[4]說明你添加的刪除按紐在DataGrid控件中位于第五列,列號從0開始。
方法二:使用模板列
1.為DataGrid添加一個模板列,名為“自定義刪除”,在這個模板列中添加一個按紐,將按紐的CommandName屬性設為UserDelete;
2.為DataGrid添加ItemCreated事件,添加客戶端腳本程序,代碼如下:
switch(e.Item.ItemType)
???{
????case?ListItemType.Item:
????case?ListItemType.EditItem:
????case?ListItemType.AlternatingItem:
?????Button?myDelButton?=?(Button)e.Item.FindControl("btnDelete");
?????myDelButton.Attributes.Add("onclick","return?confirm('你真的要刪除第"+(e.Item.ItemIndex+1).ToString()+"行嗎?');");
?????break;
???}
3.為DataGrid添加ItemCommand事件,處理刪除事件,代碼如下:
if(e.CommandName?==?"UserDelete")
???{
???? //執行刪除。
???}
方法三:
這種方法很少見到人用,但卻是最簡單的方法,方法如下:
將DataGrid的刪除按紐的文本屬性設為如下代碼:
<div?id=d?onclick="JavaScript:return?confirm('你真的要刪除這一行嗎?');">刪除</div>
使用RenderMethod 委托實現DataGrid表頭合并
1using?System;
??2using?System.Collections;
??3using?System.ComponentModel;
??4using?System.Data;
??5using?System.Drawing;
??6using?System.Web;
??7using?System.Web.SessionState;
??8using?System.Web.UI;
??9using?System.Web.UI.WebControls;
?10using?System.Web.UI.HtmlControls;
?11using?System.Data.SqlClient;
?12
?13namespace?WebDataGridHeader
?14{
?15????/**//**//**////?<summary>
?16????/**////DataGrid表頭合并問題
?17????/**////?</summary>
?18????public?class?WebForm1?:?System.Web.UI.Page
?19????{
?20????????protected?System.Web.UI.WebControls.DataGrid?DataGrid1;
?21????????protected?System.Web.UI.WebControls.Label?Label1;
?22????
?23????????private?void?Page_Load(object?sender,?System.EventArgs?e)
?24????????{
?25????????????//?在此處放置用戶代碼以初始化頁面
?26????????????string?m_strConn?=?"server=.;uid=sa;pwd=sa;database=Northwind";
?27????????????SqlConnection?conn?=?new?SqlConnection(m_strConn);
?28????????????
?29????????????try
?30????????????{
?31????????????????conn.Open();
?32
?33????????????????SqlCommand?cmd?=?new?SqlCommand("SELECT?*?FROM?Employees",conn);
?34????????????
?35????????????????SqlDataAdapter?adp?=?new?SqlDataAdapter(cmd);
?36
?37????????????????DataTable?dt?=?new?DataTable();
?38????????????????adp.Fill(dt);
?39
?40????????????????this.DataGrid1.DataSource?=?dt;
?41????????????????this.DataGrid1.DataBind();
?42????????????}
?43????????????catch(Exception?ex)
?44????????????{
?45????????????????throw?ex;
?46????????????}
?47????????????finally
?48????????????{
?49????????????????conn.Close();
?50????????????}
?51????????}
?52
?53????????Web?窗體設計器生成的代碼Web?窗體設計器生成的代碼#region?Web?窗體設計器生成的代碼
?54????????override?protected?void?OnInit(EventArgs?e)
?55????????{
?56????????????//
?57????????????//?CODEGEN:?該調用是?ASP.NET?Web?窗體設計器所必需的。
?58????????????//
?59????????????InitializeComponent();
?60????????????base.OnInit(e);
?61????????}
?62????????
?63????????/**//**//**////?<summary>
?64????????/**////?設計器支持所需的方法?-?不要使用代碼編輯器修改
?65????????/**////?此方法的內容。
?66????????/**////?</summary>
?67????????private?void?InitializeComponent()
?68????????{????
?69????????????this.DataGrid1.ItemCreated?+=?new?System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemCreated);
?70????????????this.Load?+=?new?System.EventHandler(this.Page_Load);
?71
?72????????}
?73????????#endregion
?74????????
?75????????/**//**//**////?<summary>
?76????????/**////?創建Item
?77????????/**////?</summary>
?78????????/**////?<param?name="sender"></param>
?79????????/**////?<param?name="e"></param>
?80????????private?void?DataGrid1_ItemCreated(object?sender,?System.Web.UI.WebControls.DataGridItemEventArgs?e)
?81????????{
?82????????????//將Item的呈現方法定向到自定義的呈現方法上
?83????????????ListItemType?lit?=?e.Item.ItemType;
?84????????????if(ListItemType.Header?==?lit)
?85????????????{
?86????????????????e.Item.SetRenderMethodDelegate(new?RenderMethod(NewRenderMethod));
?87????????????}
?88????????}
?89????????
?90????????/**//**//**////?<summary>
?91????????/**////?自定義的Item呈現方法
?92????????/**////?</summary>
?93????????/**////?<param?name="writer"></param>
?94????????/**////?<param?name="ctl"></param>
?95????????private?void?NewRenderMethod(HtmlTextWriter?writer,Control?ctl)
?96????????{
?97????????????//不需要從<TR>標簽開始
?98????????????//輸出“聯系電話”列
?99????????????writer.Write("<TD?colspan=\"3\"?align=\"center\">聯系電話</TD>\n");
100
101????????????//“地址”列必須有rowspan屬性且必須在第一列呈現
102????????????TableCell?cell?=?(TableCell)ctl.Controls[ctl.Controls.Count?-?1];
103????????????cell.Attributes.Add("rowspan","2");
104????????????cell.RenderControl(writer);
105
106????????????//現在關閉第一行
107????????????writer.Write("</TR>\n");
108
109????????????//將設計時的樣式屬性添加到第二行使得兩行的外觀相似
110????????????this.DataGrid1.HeaderStyle.AddAttributesToRender(writer);
111
112????????????//插入第二行
113????????????writer.RenderBeginTag("TR");
114
115????????????//呈現除了最后一列(剛才已經呈現過了)外的所有在設計時定義的cells
116????????????for(int?i=0;i<=ctl.Controls.Count-2;i++)
117????????????{
118????????????????ctl.Controls[i].RenderControl(writer);
119????????????}
120
121????????????//不需要以</TR>結束
122????????}
123????}
124}?
測試例子中的DataGrid選擇了Employees表中的四個字段?
代碼如下:?
<asp:DataGrid?id="DataGrid1"?runat="server"?Width="793px"?Height="296px"?AutoGenerateColumns="False"?
BorderColor="#CC9966"?BorderStyle="None"?BorderWidth="1px"?BackColor="White"?CellPadding="4">?
<SelectedItemStyle?Font-Bold="True"?ForeColor="#663399"?BackColor="#FFCC66"></SelectedItemStyle>?
<ItemStyle?ForeColor="#330099"?BackColor="White"></ItemStyle>?
<HeaderStyle?Font-Bold="True"?ForeColor="#FFFFCC"?BackColor="#990000"></HeaderStyle>?
<FooterStyle?ForeColor="#330099"?BackColor="#FFFFCC"></FooterStyle>?
<Columns>?
<asp:BoundColumn?DataField="LastName"?HeaderText="辦公電話"></asp:BoundColumn>?
<asp:BoundColumn?DataField="FirstName"?HeaderText="住宅電話"></asp:BoundColumn>?
<asp:BoundColumn?DataField="HomePhone"?HeaderText="移動電話"></asp:BoundColumn>?
<asp:BoundColumn?DataField="Address"?HeaderText="聯系地址"></asp:BoundColumn>?
</Columns>?
<PagerStyle?HorizontalAlign="Center"?ForeColor="#330099"?BackColor="#FFFFCC"></PagerStyle>?
</asp:DataGrid>DataGrid中使用CheckBox的CheckedChanged事件
使用DataGrid的過程中常會用到CheckBox控件,并使用它的CheckedChanged事件。使用如下:
1、CheckBox控件需要設置AutoPostBack="true"
<asp:CheckBox?id="chbIsActive"?runat="server"?AutoPostBack="true"></asp:CheckBox>
2、CheckBox控件的事件須在DataGrid的ItemCreated定義才能生效
????????private?void?grdStructure_ItemCreated(object?sender,?System.Web.UI.WebControls.DataGridItemEventArgs?e)
????????{
????????????if(e.Item.ItemType?==?ListItemType.Item?||?e.Item.ItemType?==?ListItemType.AlternatingItem)
????????????{
????????????????
????????????????CheckBox?chbIsActive?=?e.Item.FindControl("chbIsActive")?as?CheckBox;
????????????????chbIsActive.CheckedChanged?+=?new?EventHandler(chbIsActive_CheckedChanged);
????????????}
????????}
3、編寫事件代碼
????????private?void?chbIsActive_CheckedChanged(object?sender,?EventArgs?e)
????????{
????????????CheckBox?chbIsActive?=?(CheckBox)sender;
????????????Guid?structureUID?=?new?Guid(chbIsActive.Attributes["StructureUID"]);
????????????bool?isActive?=?chbIsActive.Checked;
????????????IPMStructureManager?manager?=?PMStructureManagerFactory.GetInstance();
????????????manager.SetActive(structureUID,?isActive);
????????????this.Binding();
????????}
在DataGrid中添加一個合計字段 你是否花了很時間來閱讀?ASPNG?列表?如果不是的話,我非常推薦它。你可以訪問
http://www.asp.net/?或?http://www.asplists.com/asplists/aspngevery.asp。最近的最常見的一個問題是:“?我怎樣在?DataGrid?中顯示列合計?”。?我親自多次為這個問題提供了示例代碼,因此,我想在DotNetJunkies?的標題中提供這么一份指南。?在這份指南中你將會學到怎樣在?DataGrid?中編程實現對某一列的值進行統計,并在?DataGrid?的頁腳中顯示其合計值。這份指南中供下載的示例中包括了?C#?和?Visual?Basic.NET?兩種代碼。
?
上面所用到的屏幕圖片中的?DataGrid?是一個非常典型的?DataGrid?。有許多控制?DataGrid?外觀的屬性,它使用兩個?BoundColumns?來操作數據,但這并不是最重要的。做好這項工作真正重要的是使用?DataGrid.OnItemDataBound?事件。這個事件將會觸發每次綁定一條記錄到?DataGrid。你可以為這個事件創建一個事件處理,以操作數據記錄。在這種情況下,你將會得到運行時?Price?列的合計值。
頁腳指的是數據范圍的最后一行。當這行被限定時,在事件句處理你可以得到?Price?列的運行時統計值。
實施:
首先讓我們找到一種方法來操作?Web?窗體輸出。?這份指南中,你將使用一個?Web?窗體?(calcTotals.aspx)?以及一個類代碼文件?(calcTotals.aspx.cs)。這份指南的意圖是,?類代碼將會使用?Just-In-Time?編譯器來編譯。?這里是?calcTotals.aspx?的代碼:
<%@?Page?Inherits="myApp.calcTotals"?Src="20010731T0101.aspx.cs"?%>
<html>
<body?bgcolor="white">
<asp:DataGrid?id="MyGrid"?runat="server"
??AutoGenerateColumns="False"
??CellPadding="4"?CellSpacing="0"
??BorderStyle="Solid"?BorderWidth="1"
??Gridlines="None"?BorderColor="Black"
??ItemStyle-Font-Name="Verdana"
??ItemStyle-Font-Size="9pt"
??HeaderStyle-Font-Name="Verdana"
??HeaderStyle-Font-Size="10pt"
??HeaderStyle-Font-Bold="True"
??HeaderStyle-ForeColor="White"
??HeaderStyle-BackColor="Blue"
??FooterStyle-Font-Name="Verdana"
??FooterStyle-Font-Size="10pt"
??FooterStyle-Font-Bold="True"
??FooterStyle-ForeColor="White"
??FooterStyle-BackColor="Blue"
??OnItemDataBound="MyDataGrid_ItemDataBound"
??ShowFooter="True">
??<Columns>
????<asp:BoundColumn?HeaderText="Title"?DataField="title"?/>
????<asp:BoundColumn?HeaderText="Price"?DataField="price"
??????ItemStyle-HorizontalAlign="Right"
??????HeaderStyle-HorizontalAlign="Center"?/>
???</Columns>
</asp:DataGrid>
</body>
</html>?
在?Web?窗體中你使用?@?Page?來直接聲明這個頁所繼承的類代碼。SRC?屬性指明了類代碼將使用?JIT?編譯器來編譯。?Web?窗體中的大部分代碼樣式聲明用來使?DataGrid?外觀變得更好看。
最后指定的屬性之一是?OnItemDataBound?屬性。這個事件將會在?OnItemDataBound?事件發生時被觸發。
Web?窗體中的?DataGrid?(MyGrid)?包含有兩個?BoundColumns,一個是?Title?,另一個是Price。?這里將顯示?Pubs?數據庫(SQL?Server)中?Titles?表的?title?及?price?列。
忽略代碼的定義
類代碼在所有的地方都將使用。在類代碼中,你可以操作兩個事件:Page_Load?事件以及?MyGrid_OnItemDataBound?事件。還有一個私有方法?CalcTotal,?用它來簡單的完成運行時統計的數學運算。
類代碼基本結構塊的起始部分:
using?System;
using?System.Web;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Web.UI.HtmlControls;
using?System.Data;
using?System.Data.SqlClient;
namespace?myApp
{
??public?class?calcTotals?:?Page
??{
????protected?DataGrid?MyGrid;
????private?double?runningTotal?=?0;
??}
}?
在類代碼的基本結構中,你必須使用相關語句導入名字空間(namespace)。在類聲明中,你聲明了兩個變量,一個是類代碼中映射?Web?窗體的?DataGrid(MyGrid)控件的變量;一個是用來操作?DataGrid?的?Price?列中運行時統計的雙精度值。?
Page_Load?事件
在?Page_Load?事件中,你所要做的就是連接到?SQL?Server?并執行一個簡單的?SqlCommand。?你取得了所有?Price?值>0?的?title?和?price?數據。你使用?SqlCommand.ExecuteReader?方法返回一個?SqlDataReader?并將其直接綁定到?DataGrid?(MyGrid)。
protected?void?Page_Load(object?sender,?EventArgs?e)
{
??SqlConnection?myConnection?=?new?SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");//創建SQL連接
??SqlCommand?myCommand?=?new?SqlCommand("SELECT?title,?price?FROM?Titles?WHERE?price?>?0",?myConnection);//創建SQL命令
??try
??{
????myConnection.Open();//打開數據庫連接
????MyGrid.DataSource?=?myCommand.ExecuteReader();//指定?DataGrid?的數據源
????MyGrid.DataBind();//綁定數據到?DataGrid
????myConnection.Close();//關閉數據連接
??}
??catch(Exception?ex)
??{
????//捕獲錯誤
????HttpContext.Current.Response.Write(ex.ToString());
??}
}
?
CalcTotals?方法
CalcTotals?方法用來處理?runningTotal?變量。這個值將以字符串形式來傳遞。?你需要將它解析為雙精度型,然后?runningTotal?變量就成了雙精度類型。
private?void?CalcTotal(string?_price)
{
??try
??{
????runningTotal?+=?Double.Parse(_price);
??}
??catch
??{
?????//捕獲錯誤
??}
}
?
MyGrid_ItemDataBound?事件
MyGrid_ItemDataBound?事件在數據源中每行綁定到?DataGrid?時被調用。在這個事件處理中,你可以處理每一行數據。?這里你的目的是,你將需要調用?CalcTotals?方法并從?Price?列傳遞文本,并用金額型格式化每一行的?Price?列,?并在頁腳行中顯示?runningTotal?的值。
public?void?MyDataGrid_ItemDataBound(object?sender,?DataGridItemEventArgs?e)
{
??if?(e.Item.ItemType?==?ListItemType.Item?||?e.Item.ItemType?==?ListItemType.AlternatingItem)
??{
????CalcTotal(?e.Item.Cells[1].Text?);
????e.Item.Cells[1].Text?=?string.Format("{0:c}",?Convert.ToDouble(e.Item.Cells[1].Text));
??}
??else?if(e.Item.ItemType?==?ListItemType.Footer?)
??{
????e.Item.Cells[0].Text="Total";
????e.Item.Cells[1].Text?=?string.Format("{0:c}",?runningTotal);
??}
}
?
在?MyGrid_ItemDataBound?事件句柄中,首先你得使用?ListItemType?判斷當前的?DataGridItem?是一個數據項還是AlternatingItem?行。如果是數據項,你調用?CalcTotals,并將?Price?列的值作為參數傳遞給它;然后你以金額格式對?Price?列進行格式化及著色。
如果?DataGridItem?是頁腳,可以用金額格式顯示?runningTotal。
總結
在這份指南中,你學到了怎樣使用?DataGrid.OnItemDataBound?事件來實現運行時對DataGrid?的某一列進行統計。使用這個事件,你可以創建一個列的合計并可對DataGrid行的頁腳進行著色。?
使用DataGrid動態綁定DropDownList 簡單的使用模板列綁定DropDownList,初學者想必都會了,但有時候,我們要做的就是在編輯的時候想讓某一列定制為DropDownList,并且根據正常情況下顯示的值自動變換DropDownList中所選的值,然后保存選擇后的值到數據庫或XML文件,其實要做到這樣的功能并不難,只要我們學會使用DataGrid的DataGrid1_ItemDataBound事件就行了,跟我來做個例子。
//檢索數據庫的函數
public?DataSet?GetZcbd()
{
try
{
DataSet?ds=new?DataSet();?
string?searchString="select?id,yy,bj?from?zc";
da=new?OleDbDataAdapter(searchString,conn);
da.Fill(ds,"yy");?
return?ds;
}
catch
{
return?null;?
}?
}
//綁定DataGrid?
private?void?BindGrid()
{
DataSet?ds?=?new?DataSet();
ds?=?us.GetZcbd();
if?(ds!=null)
{
this.DataGrid1.DataSource?=?ds;
this.DataGrid1.DataBind();
}
else
{
msg.Alert("加載數據錯誤!",Page);
}
}
綁定好DataGrid以后,設定模板列,讓其正常顯示下為Label,并綁定為數據庫中一ID值,在編輯狀態下為DropDownList,并綁定為數據庫中一Name值,我們現在要做的就是當我們選擇編輯時根據Label的值自動從數據庫中取出編號為ID值的姓名,并用DropDownList默認選中。(注釋:為了方便大家學習,我給出一個簡單代碼的例子,供大家參考)
private?void?DataGrid1_ItemDataBound(object?sender,?System.Web.UI.WebControls.DataGridItemEventArgs?e)
{
if?(e.Item.ItemType?==?ListItemType.EditItem)
{
DataRowView?drv?=?(DataRowView)e.Item.DataItem;
string?current?=?drv["label1"].ToString();
DropDownList?ddl?=?(DropDownList)e.Item.FindControl("ddl");
ddl.SelectedIndex?=?ddl.Items.IndexOf(ddl.Items.FindByValue(current));
}
if?((e.Item.ItemType?==?ListItemType.Item)||(e.Item.ItemType?==?ListItemType.AlternatingItem))?
{
Label?t?=?(System.Web.UI.WebControls.Label)e.Item.FindControl("label1");
string?current?=?this.BindDDL(int.Parse(t.Text));
e.Item.Cells[1].Text?=?current;
}
}
private?string?BindDDL(int?ddd)
{
string?sss?=?"";
if?(ddd==1)
{
sss="張三";
return?sss;
}
else
{
sss="李四";
return?sss;
}
}
注釋:msg為一個類似WinForm的messagebox對話框,不必理會。可以使用label.Text代替
轉載于:https://www.cnblogs.com/xh831213/archive/2006/02/13/329451.html
總結
以上是生活随笔為你收集整理的DataGrid 功能实现收集(转)保留做参考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javascript动态执行问题浅析
- 下一篇: 回溯法在解决八皇后问题中的应用