日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GridView常用总结

發布時間:2025/6/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GridView常用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GridView的常用用法總結

------------------

GridView七種類型字段

Field字段類型

說明

BoundField(數據綁定字段)

將Data Source數據源的字段數據以文本方式顯示

ButtonField(按鈕字段)

在數據綁定控件中顯示命令按鈕。根據控件的不同,它可讓您顯示具有自定義按鈕控件(例如【添加】或【移除】按鈕)的數據行或數據列,按下時會引發RowCommand事件

CommandField(命令字段)

顯示含有命令的Button按鈕,包括了Select、Edit、Update、Delete命令按鈕(DetailsView的CommandField才支持Insert命令)

CheckBoxField(CheckBox字段)

顯示為CheckBox類型,通常用于布爾值True/False的顯示

HyperLinkField(超鏈接字段)

將Data Source數據源字段數據顯示成HyperLink超級鏈接,并可指定另外的NavigateUrl超鏈接

ImageField(圖像字段)

在數據綁定控件中顯示圖像字段

TemplateField(模板字段)

顯示用戶自定義的模板內容

?

GridView四種樣式

通過ControlStyle可設置BoundField字段服務器子控件的樣式。

通過FooterStyle可設置BoundField字段之頁尾的樣式。

通過HeaderStyle可設置BoundField字段之頁首的樣式。

通過ItemStyle可設置BoundField字段中數據項的樣式。

?

格式化字符串

格式代號

說? 明

原始格式

格式指令

運行結果

{0:C}

顯示貨幣符號格式

2005.5

{0:C2}

NT$2,005.50

{0:D}

顯示十進制數格式(限用于整數)

128

{0:D}

128

{0:E}

顯示科學符號格式

2005.5

{0:E2}

2.01E+003

{0:F}

顯示固定小數字數格式

2005.5

{0:F4}

2005.5000

{0:G}

顯示一般格式

2005.5

{0:G}

2005.5

{0:N}

顯示有逗號固定小數字數格式

2005.5

{0:N3}

2,005.500

{0:P}

顯示百分比格式

0.25

{0:P}

25.00%

{0:X}

顯示十六進制數格式(限用于整數)

128

{0:X}

80

{0:#}

顯示自定義的數字格式

2005.5

{0:00####.00}

002005.00

?

各種類型字段使用方法

BoundField :

HeaderText? 列名(在網頁中顯示出來的)

HeaderImageUrl? 列頭的圖片??

DataField ?數據源字段名

NullDisplayText? 當該字段的值為空時顯示的值

ButtonField:

ButtonType? 有Button?Image?Link三種

DataTextField? 將數據源字段數據綁定到Button按鈕的文本屬性中

ImageUrl? 當按鈕形式為Image時,指定Image所在的Url

CommandName? 單擊ButtonField按鈕時所要運行的命令名稱

相關事件:

當ButtonField按鈕字段被按下時,GridView控件會引發RowCommand事件,

若要判斷引發命令事件之數據行的索引,請使用事件自變量的CommandArgument屬性,會將該事件自變量傳遞至數據綁定控件的命令事件,ButtonField類會自動用適當的索引值填入CommandArgument屬性。在事件響應函數中可以根據不同的CommandName來做不同的操作。

從事件中判斷e.CommandName和對第幾行進行的操作e.CommandArgument。

Example:

if (e.CommandName == "Select")

??????? {

??????????? int index = Convert.ToInt32(e.CommandArgument);

??????? }

}

?

CommandField:

五種命令:Select、Edit、Update、Delete與Insert。顯示及隱藏命令按鈕您可以設置ShowDeleteButton、ShowEditButton、ShowInsertButton與ShowSelectButton這幾個屬性(True或False)。而設置不同命令按鈕的文字標題可用的屬性有SelectText、InsertText、UpdateText、DeleteText、CancelText、EditText、NewText。

若您將ButtonType屬性設為ButtonType.Image,則可以設置按鈕的圖像Url屬性,可供使用的有CancelImageUrl、 DeleteImageUrl、EditImageUrl、InsertText、NewImageUrl、SelectImageUrl、 UpdateImageUrl。

SelectedRowStyle 用于設置選中行的風格

相關事件:

RowEditing??

RowDeleting

RowUpdating

RowCancelingEdit

注意:RowEditing和RowUpdating的不同

Example:( 摘自:http://hi.baidu.com/70zz)

后臺代碼:

你可以使用sqlhelper,本文沒用。代碼如下:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

?

public partial class _Default : System.Web.UI.Page

{

?

//清清月兒http://blog.csdn.net/21aspnet

???? SqlConnection sqlcon;

???? SqlCommand sqlcom;

???? string strCon = "Data Source=(local);Database=數據庫名;Uid=帳號;Pwd=密碼";

???? protected void Page_Load(object sender, EventArgs e)

???? {

???????? if (!IsPostBack)

?????? ??{

???????????? bind();

???????? }

???? }

???? protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

???? {

???????? GridView1.EditIndex = e.NewEditIndex;

???????? bind();

???? }

?

//刪除

???? protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

???? {

???????? string sqlstr = "delete from 表 where id='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";

???????? sqlcon = new SqlConnection(strCon);

???????? sqlcom = new SqlCommand(sqlstr,sqlcon);

???????? sqlcon.Open();

???????? sqlcom.ExecuteNonQuery();

???????? sqlcon.Close();

???????? bind();

???? }

?

//更新

//gridview的列、行都是從0開始編號的

//我在用“GridView1.DataKeys[e.RowIndex].Value.ToString()”老是報“索引超出范圍“,不知原因。

//建議改用后文寫的”如何獲取 GridView 編輯狀態下單元格里的值“的方法

???? protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

???? {

???????? sqlcon = new SqlConnection(strCon);

???????? string sqlstr = "update 表 set 字段1='"

???????????? + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',字段2='"

???????????? + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',字段3='"

? ???????????+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where id='"

???????????? + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";

???????? sqlcom=new SqlCommand(sqlstr,sqlcon);

???????? sqlcon.Open();

???????? sqlcom.ExecuteNonQuery();

???????? sqlcon.Close();

???????? GridView1.EditIndex = -1;

???????? bind();

???? }

?

//取消

???? protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

???? {

???????? GridView1.EditIndex = -1;

???????? bind();

???? }

?

//綁定

???? public void bind()

???? {

???????? string sqlstr = "select * from 表";

???????? sqlcon = new SqlConnection(strCon);

???????? SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);

???????? DataSet myds = new DataSet();

???????? sqlcon.Open();

???????? myda.Fill(myds, "表");

???????? GridView1.DataSource = myds;

???????? GridView1.DataKeyNames = new string[] { "id" };//主鍵

???????? GridView1.DataBind();

???????? sqlcon.Close();

//若在頁面配置了數據源SqlDataSource1,用下2行代碼,不過在頁面里不要加SqlDataSourceID=SqlDataSource1屬性了

??????? //GridView1.DataSource = SqlDataSource1;

??????? //GridView1.DataBind();

???? }

}

?

前臺主要代碼:

<!--

??? 使用時曾碰到這樣的問題:要激發OnRowUpdating="GridView1_RowUpdating"事件,必須先寫了OnRowEditing="GridView1_RowEditing"事件,不然會報”激發了未處理的事件RowEditing‘“,現在還沒搞清楚什么原因。。。

-->???????????????????????????? ... ...

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"

??????????????????? ?????ForeColor="#333333" GridLines="None" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing"

???????????????????????? OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit">

???????????????????????? <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />

???????????????????????? <Columns>

???????????????????????????? <asp:BoundField DataField="身份證號碼" HeaderText="用戶ID" ReadOnly="True" />

???????????????????????????? <asp:BoundField DataField="姓名" HeaderText="用戶姓名" />

???????????????????????????? <asp:BoundField DataField="員工性別" HeaderText="性別" />

???????????????????????????? <asp:BoundField DataField="家庭住址" HeaderText="家庭住址" />

???????????????????????????? <asp:CommandField HeaderText="選擇" ShowSelectButton="True" />

???????????????????????????? <asp:CommandField HeaderText="編輯" ShowEditButton="True" />

???????????????????????????? <asp:CommandField HeaderText="刪除" ShowDeleteButton="True" />

???????????????????????? </Columns>

??????????????? ?????????<RowStyle ForeColor="#000066" />

???????????????????????? <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />

???????????????????????? <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />

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

???????????????????? </asp:GridView>

?

CheckBoxField:

DataField???? 設置綁定至數據源的字段名稱

Text???? 設置CheckBox右側的說明文字

ReadOnly???? 在編輯模式時,設置ReadOnly屬性可以防止被編輯

?

HyperLinkField

DataTextField??? 綁定數據源字段顯示成超鏈接文字

DataNavigateUrlFields???? 將數據字段綁定到超鏈接字段Url屬性

Target ??如果設置為"_blank"表示在空白頁中打開

?

ImageField

DataImageUrlField??? 設置綁定至ImageField對象ImageUrl屬性的數據源字段名稱

?

TemplateField

ItemTemplate??? 字段項目模板

AlternatingItemTemplate 字段交替項目模板,若設置這個字段后,奇數行會顯示ItemTemplate,偶數行顯示AlternatingItemTemplate

EditItemTemplate???? 編輯項目模板

?

其他常見用法

1 程序中動態設置表頭名稱

gv.Columns[0].HeaderText=”表頭”;

2 修改時獲取文本控件上的文本

string card=((TextBox)CellGrid.Rows[e.RowIndex].Cells[1].Controls[0]).Text;

獲得其他類型的控件同理,將上面代碼的控件類型做修改即可

3 在每一行綁定數據時,會發生RowDataBound事件,可在這里添加相應的事件響應函數

4 刪除之前提示是否確定刪除:

在RowDataBound事件中加入該代碼

if (e.Row.RowType == DataControlRowType.DataRow)

{

((CheckBox)e.Row.FindControl("CheckBox1")).Attributes.Add("onclick","return confirm('XXX')");

}

5 AutoGenerateColumns? 是否自動添加列,如果是的話意味著是通過程序代碼來實現添加的

?

?

分頁的實現

關鍵屬性:

AllowPaging設置為"True"

PageSize設置每一行顯示的行數

Mode 分頁樣式,包含這四種:NextPreviousFirstLast、NumericFirstLast、NextPrevious、Numeric(Numeric指顯示數字;First、Last指最開始和最后一個;Next、Previous指上一個和下一個)

FirstPageImageUrl、LastPageImageUrl、NextPageImageUrl、PreviousPageImageUrl分別指對應的圖片

PagerStyle 中HorizontalAlign、VerticalAlign、BorderStyle用于設置分頁控制的樣式

?

關鍵事件

OnPageIndexChanging分頁事件

當發生該事件后,重新綁定數據源

Example:

ArticleList.PageIndex = e.NewPageIndex;

if (Session["SQLStr"] != null)

{

?? string SQLStr = Session["SQLStr"].ToString();

?? GirdViewRefresh(SQLStr);

}

?

典型使用步驟:

添加GridView控件,設置相關屬性:

Columns中添加相應的數據行

RowStyle、AlternatingRowStyle設置數據行樣式

分頁設置AllowPaging="True";PageSize設置每頁好顯示的行數

SelectedRowStyle 設置選擇行的樣式

在CS文件添加相應的響應函數:

(1)Page_Load中綁定數據源:

ArticleList.DataSource = ds.Tables[0].DefaultView;

ArticleList.DataBind();

?

(2)OnPageIndexChanging中更新頁索引,重新綁定數據源

ArticleList.PageIndex = e.NewPageIndex;

if (Session["SQLStr"] != null)

{

???? string SQLStr = Session["SQLStr"].ToString();

???? GirdViewRefresh(SQLStr);

}

?

(3)RowCommand加入事件響應

if (e.CommandName == "Select")

??????? {

??????????? int index = Convert.ToInt32(e.CommandArgument);

??????? }

}

----------------------

如何獲取 GridView 編輯狀態下單元格里的值

----------------------

還在使用這樣的代碼嗎?

var?txtName?=?grid1.Rows[e.RowIndex].Cells[0].FindControl("txtName")?as?TextBox;

if?(txtName?!=?null)

{

????//?讀取值

????//?

}

其實這些工作(在單元格中查找控件,并嘗試獲取其中的值)已經被封裝了。現在,只要調用 ExtractValuesFromCell 方法即可。

而該方法也被很多種列類型所支持:

DataControlField, BoundField, AutoGeneratedField, CheckBoxField, ImageField, TemplateField, DynamicField

你可以在 GridView 的 RowUpdating, RowDeleting 等事件中使用它。利用該方法,可以將值提取到所需的字典里去,然后再從字典中讀取。這些字典包括:e.Keys, e.NewValues, e.OldValues 等。

一小段例子代碼:

????//?更新

????protected?void?grid1_RowUpdating(object?sender,?GridViewUpdateEventArgs?e)

????{

????????var?row?=?grid1.Rows[e.RowIndex];

????????//?提取?Id?字段的值

????????grid1.Columns[0].ExtractValuesFromCell(

????????????e.Keys,

????????????row.Cells[0]?as?DataControlFieldCell,

????????????DataControlRowState.Edit,

????????????true?/*?include?readonly?*/);

????????//?提取?Name?字段的值

????????grid1.Columns[1].ExtractValuesFromCell(

????????????e.NewValues,

????????????row.Cells[1]?as?DataControlFieldCell,

????????????DataControlRowState.Edit,

????????????true?/*?include?readonly?*/);

????????var?id?=?int.Parse(e.Keys["id"].ToString());

????????var?name?=?(string)?e.NewValues["name"];

????????//?執行相關的數據庫更新操作

????????//?

????}

這樣,在大多數場合我們可以盡可能多的使用 BoundField,并且也能正確讀取到其編輯時的值,省下自定義 TemplateField 的一堆代碼了。

總結

以上是生活随笔為你收集整理的GridView常用总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。