天天看點

gridview

15.GridView合并表頭多重表頭無錯完美版(以合并3列3行舉例)

效果圖:

背景代碼:

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;

using System.Drawing;

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

{

SqlConnection sqlcon;

SqlCommand sqlcom;

string strCon = "Data Source=(local);Database=北風貿易;Uid=sa;Pwd=sa";

protected void Page_Load(object sender, EventArgs e)

if (!IsPostBack)

bind();

}

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

GridView1.EditIndex = e.NewEditIndex;

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

sqlcon = new SqlConnection(strCon);

string sqlstr = "update 飛狐工作室 set 姓名='"

+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',家庭住址='"

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

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

sqlcom=new SqlCommand(sqlstr,sqlcon);

sqlcon.Open();

sqlcom.ExecuteNonQuery();

sqlcon.Close();

GridView1.EditIndex = -1;

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

public void bind()

string sqlstr = "select top 10 * from 飛狐工作室";

SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);

DataSet myds = new DataSet();

myda.Fill(myds, "飛狐工作室");

GridView1.DataSource = myds;

GridView1.DataKeyNames = new string[] { "×××号碼" };

GridView1.DataBind();

//這裡就是解決方案

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)

switch (e.Row.RowType)

case DataControlRowType.Header:

//第一行表頭

TableCellCollection tcHeader = e.Row.Cells;

tcHeader.Clear();

tcHeader.Add(new TableHeaderCell());

tcHeader[0].Attributes.Add("rowspan", "3"); //跨Row

tcHeader[0].Attributes.Add("bgcolor", "white");

tcHeader[0].Text = "";

//tcHeader[1].Attributes.Add("bgcolor", "Red");

tcHeader[1].Attributes.Add("colspan", "6"); //跨Column

tcHeader[1].Text = "全部資訊</th></tr><tr>";

//第二行表頭

tcHeader[2].Attributes.Add("bgcolor", "DarkSeaGreen");

tcHeader[2].Text = "×××号碼";

tcHeader[3].Attributes.Add("bgcolor", "LightSteelBlue");

tcHeader[3].Attributes.Add("colspan", "2");

tcHeader[3].Text = "基本資訊";

tcHeader[4].Attributes.Add("bgcolor", "DarkSeaGreen");

tcHeader[4].Text = "福利";

tcHeader[5].Attributes.Add("bgcolor", "LightSteelBlue");

tcHeader[5].Attributes.Add("colspan", "2");

tcHeader[5].Text = "聯系方式</th></tr><tr>";

//第三行表頭

tcHeader[6].Attributes.Add("bgcolor", "Khaki");

tcHeader[6].Text = "×××号碼";

tcHeader[7].Attributes.Add("bgcolor", "Khaki");

tcHeader[7].Text = "姓名";

tcHeader[8].Attributes.Add("bgcolor", "Khaki");

tcHeader[8].Text = "出生日期";

tcHeader[9].Attributes.Add("bgcolor", "Khaki");

tcHeader[9].Text = "薪水";

tcHeader[10].Attributes.Add("bgcolor", "Khaki");

tcHeader[10].Text = "家庭住址";

tcHeader[11].Attributes.Add("bgcolor", "Khaki");

tcHeader[11].Text = "郵政編碼";

break;

前台:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>GridView合并多重表頭表頭 清清月兒http://blog.csdn.net/21aspnet </title>

</head>

<body >

<form id="form1" runat="server">

<div >

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="3" OnRowEditing="GridView1_RowEditing"

OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" Font-Size="12px" OnRowCreated="GridView1_RowCreated" >

<FooterStyle BackColor="White" ForeColor="#000066" />

<Columns>

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

<asp:BoundField DataField="×××号碼" HeaderText="編号" ReadOnly="True" />

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

<asp:BoundField DataField="出生日期" HeaderText="郵政編碼" />

<asp:BoundField DataField="起薪" HeaderText="起薪" />

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

<asp:BoundField DataField="郵政編碼" HeaderText="郵政編碼" />

</Columns>

<RowStyle ForeColor="#000066" />

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

<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" CssClass="ms-formlabel DataGridFixedHeader"/>

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

</asp:GridView>

</div>

</form>

</body>

</html>

16.GridView突出顯示某一單元格(例如金額低于多少,分數不及格等)

解決方案:主要是綁定後過濾

for (int i = 0; i <= GridView1.Rows.Count - 1; i++)

DataRowView mydrv = myds.Tables["飛狐工作室"].DefaultView[i];

string score = Convert.ToString(mydrv["起薪"]);

if (Convert.ToDouble(score) < 34297.00)//大家這裡根據具體情況設定可能ToInt32等等

GridView1.Rows[i].Cells[4].BackColor = System.Drawing.Color.Red;

全部背景代碼:

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

sqlcom = new SqlCommand(sqlstr, sqlcon);

前台代碼:

<head id="Head1" runat="server">

<title>GridView突出顯示某一單元格 清清月兒http://blog.csdn.net/21aspnet </title>

OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" Font-Size="12px" >

<asp:BoundField DataField="起薪" HeaderText="起薪" DataFormatString="{0:C}" HtmlEncode="false"/>

17.GridView加入自動求和求平均值小計

解決方案:

private double sum = 0;//取指定列的資料和,你要根據具體情況對待可能你要處理的是int

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

if (e.Row.RowIndex >= 0)

sum += Convert.ToDouble(e.Row.Cells[6].Text);

else if (e.Row.RowType == DataControlRowType.Footer)

e.Row.Cells[5].Text = "總薪水為:";

e.Row.Cells[6].Text = sum.ToString();

e.Row.Cells[3].Text = "平均薪水為:";

e.Row.Cells[4].Text = ((int)(sum / GridView1.Rows.Count)).ToString();

背景全部代碼:

string sqlstr = "select top 5 * from 飛狐工作室";

private double sum = 0;//取指定列的資料和

前台:唯一的花頭就是設定ShowFooter="True" ,否則預設表頭為隐藏的!

OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" Font-Size="12px" OnRowDataBound="GridView1_RowDataBound" ShowFooter="True" >

18.GridView資料導入Excel/Excel資料讀入GridView

頁面增加一個按鈕,單擊事件添加如下方法:

protected void Button1_Click(object sender, EventArgs e)

Export("application/ms-excel", "學生成績報表.xls");

private void Export(string FileType, string FileName)

Response.Charset = "GB2312";

Response.ContentEncoding = System.Text.Encoding.UTF7;

Response.AppendHeader("Content-Disposition", "p_w_upload;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());

Response.ContentType = FileType;

this.EnableViewState = false;

StringWriter tw = new StringWriter();

HtmlTextWriter hw = new HtmlTextWriter(tw);

GridView1.RenderControl(hw);

Response.Write(tw.ToString());

Response.End();

//如果沒有下面方法會報錯類型“GridView”的控件“GridView1”必須放在具有 runat=server 的窗體标記内

public override void VerifyRenderingInServerForm(Control control)

還有由于是檔案操作是以要引入名稱空間IO和Text

using System.IO;

using System.Text;

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

BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" Font-Size="12px" >

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="導出" />

讀取Excel資料的代碼:這個很簡單的

private DataSet CreateDataSource()

string strCon;

strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("excel.xls") + "; Extended Properties=Excel 8.0;";

OleDbConnection olecon = new OleDbConnection(strCon);

OleDbDataAdapter myda = new OleDbDataAdapter("Select * FROM [Sheet1$]", strCon);

myda.Fill(myds);

return myds;

GridView1.DataSource = CreateDataSource();

由于時間關系,這個文章先到此。有時間再寫,其實還有很多技巧,不過我覺得如果能融彙貫通應該可以舉一反三。

<asp :BoundField DataField="CreationDate"

DataFormatString="{0:M-dd-yyyy}"

HeaderText="CreationDate" />

主要是由于htmlencode屬性預設設定為true,已防止XSS攻擊,安全起見而用的,是以,可以有以下兩種方法解決

1、

<asp :GridView ID="GridView1" runat="server">

<columns>

HtmlEncode="false"

</columns>

</asp>

将htmlencode設定為false即可

另外的解決方法為,使用模版列

<asp :GridView ID="GridView3" runat="server" >

<asp :TemplateField HeaderText="CreationDate" >

<edititemtemplate>

<asp :Label ID="Label1" runat="server"

Text='<%# Eval("CreationDate", "{0:M-dd-yyyy}") %>'>

</edititemtemplate>

<itemtemplate>

Text='<%# Bind("CreationDate", "{0:M-dd-yyyy}") %>'>

</itemtemplate>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="×××号碼"

DataSourceID="SqlDataSource1" AllowSorting="True" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" Font-Size="12px" OnRowDataBound="GridView1_RowDataBound">

<asp:BoundField DataField="×××号碼" HeaderText="×××号碼" ReadOnly="True" SortExpression="×××号碼" />

<asp:BoundField DataField="姓名" HeaderText="姓名" SortExpression="姓名" />

<asp:BoundField DataField="郵政編碼" HeaderText="郵政編碼" SortExpression="郵政編碼" />

<asp:BoundField DataField="出生日期" HeaderText="出生日期" SortExpression="出生日期" />

<asp:BoundField DataField="起薪" HeaderText="起薪" SortExpression="起薪" />

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

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:北風貿易ConnectionString1 %>"

SelectCommand="Select top 5 [出生日期], [起薪], [×××号碼], [姓名], [家庭住址], [郵政編碼] FROM [飛狐工作室]" DataSourceMode="DataReader"></asp:SqlDataSource>

附錄-常用格式化公式:

{0:C} 貨币;

{0:D4}由0填充的4個字元寬的字段中顯示整數;

{0:000.0}四舍五入小數點保留第幾位有效數字;

{0:N2}小數點保留2位有效數字;{0:N2}% 小數點保留2位有效數字加百分号;

{0:D}長日期;{0:d}短日期;{0:yy-MM-dd} 例如07-3-25;;{0:yyyy-MM-dd} 例如2007-3-25

11.GridView實作用“...”代替超長字元串:

解決方法:資料綁定後過濾每一行即可

DataRowView mydrv;

string gIntro;

if (GridView1.PageIndex == 0)

mydrv = myds.Tables["飛狐工作室"].DefaultView[i];//表名

gIntro = Convert.ToString(mydrv["家庭住址"]);//所要處理的字段

GridView1.Rows[i].Cells[3].Text = SubStr(gIntro, 2);

else

mydrv = myds.Tables["飛狐工作室"].DefaultView[i + (5 * GridView1.PageIndex)];

gIntro = Convert.ToString(mydrv["家庭住址"]);

調用的方法:

public string SubStr(string sString, int nLeng)

if (sString.Length <= nLeng)

return sString;

string sNewStr = sString.Substring(0, nLeng);

sNewStr = sNewStr + "...";

return sNewStr;

ViewState["SortOrder"] = "×××号碼";

ViewState["OrderDire"] = "ASC";

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

string sqlstr = "delete from 飛狐工作室 where ×××号碼='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";

sqlcom = new SqlCommand(sqlstr,sqlcon);

mydrv = myds.Tables["飛狐工作室"].DefaultView[i];

//如果是綁定資料行

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

////滑鼠經過時,行背景色變

//e.Row.Attributes.Add(" "this.style.backgroundColor='#E6F5FA'");

////滑鼠移出時,行背景色變

//e.Row.Attributes.Add(" "this.style.backgroundColor='#FFFFFF'");

////當有編輯列時,避免出錯,要加的RowState判斷

//if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)

//{

// ((LinkButton)e.Row.Cells[6].Controls[0]).Attributes.Add(" "javascript:return confirm('你确認要删除:\"" + e.Row.Cells[1].Text + "\"嗎?')");

//}

if (e.Row.RowIndex != -1)

int id = e.Row.RowIndex + 1;

e.Row.Cells[0].Text = id.ToString();

11.GridView一般換行與強制換行:

首先設定<asp:BoundField DataField="家庭住址" HeaderText="家庭住址" ItemStyle-Width="100" />

gridview裡有一列綁定的資料很長,顯示的時候在一行裡面顯示,頁面拉得很寬。

原因是連續英文段為一個整體導緻的,在RowDataBound中添加上了一句e.Row.Cells[2].Style.Add("word-break", "break-all")就可以。

如果要給所有的列增加此屬性:

//正常換行

GridView1.Attributes.Add("style", "word-break:keep-all;word-wrap:normal");

//下面這行是自動換行

GridView1.Attributes.Add("style", "word-break:break-all;word-wrap:break-word");

bind();//調用資料綁定即可

總之:善用CSS的word-break:break-all;word-wrap:break-word屬性即可,這個屬性是通用的對于頑固的南換行問題都可以解決,不局限于GridView。

12.GridView顯示隐藏某一列:

本方案為月兒獨創,不同于網上其他方式,我覺得用一個CheckBox更人性化,這樣可以隐藏不必要的列,讓使用者自己選擇需要出現的列,在處理多列時這是一個很好的解決方案!

圖1-開始

圖2-點選顯示的CheckBox後

GridView1.Columns[3].Visible = false;//一開始隐藏

CheckBox1.Checked = false;//如果不這樣後面的代碼會把他True

輕按兩下CheckBox1,在CheckedChanged方法裡寫上代碼,最後代碼如下:

protected void CheckBox1_CheckedChanged(object sender, EventArgs e)

GridView1.Columns[3].Visible=! GridView1.Columns[3].Visible;

Response.Write("GridView1的第4列現在的顯示隐藏狀态是:"+GridView1.Columns[3].Visible.ToString());

注意:CheckBox1的AutoPostBack要True!

背景全部代碼如下:

GridView1.Columns[3].Visible = false;

CheckBox1.Checked = false;

<title>GridView顯示隐藏列 清清月兒http://blog.csdn.net/21aspnet </title>

<body style="font-size=12px">

<div>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="3" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing"

<asp:BoundField DataField="姓名" HeaderText="使用者姓名" />

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

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

<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" Font-Size="12px"

OnCheckedChanged="CheckBox1_CheckedChanged" Text="顯示隐藏家庭住址" /></div>

13.GridView彈出新頁面/彈出制定大小位置新視窗:

方案一:簡單的方法,新視窗不固定大小

<asp:HyperLinkField HeaderText="姓名" Text="姓名" DataNavigateUrlFields="姓名" DataNavigateUrlFormatString="Default6.aspx?GoodsID={0}" Target="mainframe" NavigateUrl="~/Default6.aspx" DataTextField="姓名" >

</asp:HyperLinkField>

DataNavigateUrlFields是連結的字段名,DataNavigateUrlFormatString是路徑。

方案二:精确控制彈出視窗大小位置

<asp:HyperLinkColumn DataNavigateUrlField="EmployeeID" DataNavigateUrlFormatString="javascript:varwin=window.open('detail.aspx?ID={0}',null,'width=300,height=200');window.Close();"

DataTextField="LastName" HeaderText="LastName"></asp:HyperLinkColumn>

使用的是結合javascript的window.open方法,關于window.open的參數網上有很多文章,本站也有許多參考

彈出視窗大全 http://blog.csdn.net/21aspnet/archive/2004/10/25/150231.aspx 即可!

14.GridView固定表頭(不用javascript隻用CSS!,很好用):

代碼:

<title>GridView固定表頭 清清月兒http://blog.csdn.net/21aspnet </title>

<style>

.Freezing

position:relative ;

table-layout:fixed;

top:expression(this.offsetParent.scrollTop);

z-index: 10;

.Freezing th{text-overflow:ellipsis;overflow:hidden;white-space: nowrap;padding:2px;}

</style>

<div style="overflow-y: scroll; height: 200px;width:300px" id="dvBody">

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

用法:CSS設如上的樣式,HeaderStyle加CssClass="Freezing,套住GridView的Div設定高度寬度 <div style="overflow-y: scroll; height: 200px;width:200px" >

上一篇: GridView
下一篇: ListView 拖拽

繼續閱讀