国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET2.0中Gridview中數(shù)據(jù)操作技巧

2024-07-10 13:03:46
字體:
供稿:網(wǎng)友
    asp.net 2.0中新增的gridview控件,是十分強(qiáng)大的數(shù)據(jù)展示控件,在前面的系列文章里,分別展示了其中很多的基本用法和技巧(詳見<<asp.net 2.0中g(shù)ridview控件高級技巧>>、<<asp.net2.0利用gridview實(shí)現(xiàn)主從關(guān)系>>)。在本文中,將繼續(xù)探討有關(guān)的技巧。

  一、gridview中的內(nèi)容導(dǎo)出到excel

  在日常工作中,經(jīng)常要將gridview中的內(nèi)容導(dǎo)出到excel報(bào)表中去,在asp.net 2.0中,同樣可以很方便地實(shí)現(xiàn)將整個gridview中的內(nèi)容導(dǎo)出到excel報(bào)表中去,下面介紹其具體做法:

  首先,建立基本的頁面default.aspx

<form id="form1" runat="server">
<div>
<asp:gridview id="gridview1" runat="server">
</asp:gridview>
</div>
<br/>
<asp:button id="btnexport" runat="server" onclick="btnexport_click"
text="export to excel" />
</form>
  在default.aspx.cs中,寫入如下代碼:

protected void page_load(object sender, eventargs e)
{
 if (!page.ispostback)
 {
  binddata();
 }
}
private void binddata()
{
 string query = "select * from customers";
 sqlconnection myconnection = new sqlconnection(connectionstring);
 sqldataadapter ad = new sqldataadapter(query, myconnection);
 dataset ds = new dataset();
 ad.fill(ds, "customers");
 gridview1.datasource = ds;
 gridview1.databind();
}

public override void verifyrenderinginserverform(control control)
{
 // confirms that an htmlform control is rendered for
}

protected void button1_click(object sender, eventargs e)
{
 response.clear();
 response.addheader("content-disposition","attachment;filename=filename.xls");
 response.charset = "gb2312";
 response.contenttype = "application/vnd.xls";
 system.io.stringwriter stringwrite = new system.io.stringwriter();
 system.web.ui.htmltextwriter htmlwrite =new htmltextwriter(stringwrite);

 gridview1.allowpaging = false;
 binddata();
 gridview1.rendercontrol(htmlwrite);

 response.write(stringwrite.tostring());
 response.end();
 gridview1.allowpaging = true;
 binddata();
}
protected void paging(object sender,gridviewpageeventargs e)
{
 gridview1.pageindex = e.newpageindex;
 binddata();
}
  在上面的代碼中,我們首先將gridview綁定到指定的數(shù)據(jù)源中,然后在button1的按鈕(用來做導(dǎo)出到excel的)的事件中,寫入相關(guān)的代碼。這里使用response.addheader("content-disposition","attachment;filename=exporttoexcel.xls");中的filename來指定將要導(dǎo)出的excel的文件名,這里是exporttoexcel.xls。要注意的是,由于gridview的內(nèi)容可能是分頁顯示的,因此,這里在每次導(dǎo)出excel時,先將gridview的allowpaging屬性設(shè)置為false,然后通過頁面流的方式導(dǎo)出當(dāng)前頁的gridview到excel中,最后再重新設(shè)置其allowpaging屬性。另外要注意的是,要寫一個空的verifyrenderinginserverform方法(必須寫),以確認(rèn)在運(yùn)行時為指定的asp.net 服務(wù)器控件呈現(xiàn)htmlform 控件。

  二、訪問gridview中的各類控件

  在gridview中,經(jīng)常要訪問其中的各類控件,比如dropdownlist,radiobutton,checkbox等,下面歸納下在gridview中訪問各類控件的方法。

  首先看下如何在gridview中訪問dropdownlist控件。假設(shè)在一個gridviw中,展現(xiàn)的每條記錄中都需要供用戶用下拉選擇的方式選擇dropdownlist控件中的內(nèi)容,則可以使用如下代碼,當(dāng)用戶選擇好gridview中的dropdownlist控件的選項(xiàng)后,點(diǎn)擊按鈕,則系統(tǒng)打印出用戶到底選擇了哪些dropdownlist控件,并輸出它們的值。

public dataset populatedropdownlist()
{
 sqlconnection myconnection =new sqlconnection(configurationmanager.connectionstrings["mydatabase"].connectionstring);
 sqldataadapter ad = new sqldataadapter("select * from tblphone", myconnection);
 dataset ds = new dataset();
 ad.fill(ds, "tblphone");
 return ds;
}
  上面的代碼首先將數(shù)據(jù)庫中tblphone表的數(shù)據(jù)以dataset的形式返回。然后在頁面的itemtemplate中,如下設(shè)計(jì):

<itemtemplate>
<asp:dropdownlist id="dropdownlist1" runat="server" datasource="<%# populatedropdownlist() %>"
datatextfield="phone" datavaluefield = "phoneid">
</asp:dropdownlist>
</itemtemplate>
  這里注意dropdownlist控件的datasource屬性綁定了剛才返回的dataset(調(diào)用了populatedropdownlist()方法),并要注意設(shè)置好datatextfield和datavaluefield屬性。

  然后,在button的事件中,寫入以下代碼:

protected void button2_click(object sender, eventargs e)
{
 stringbuilder str = new stringbuilder();
 foreach (gridviewrow gvr in gridview1.rows)
 {
  string selectedtext = ((dropdownlist)gvr.findcontrol("dropdownlist1")).selecteditem.text;
  str.append(selectedtext);
 }
 response.write(str.tostring());
}
  這里,我們用循環(huán),來獲得每一行的dropdownlist控件的值,并且將值添加到字符串中最后輸出。

  接著,我們來看下如何訪問gridview控件中的checkbox控件。經(jīng)常在gridview控件中,需要給用戶多項(xiàng)選擇的功能,這個時候就需要使用checkbox控件。首先我們建立一個模版列,其中有checkbox如下:

<asp:gridview id="gridview1" runat="server" allowpaging="true" allowsorting="true"
autogeneratecolumns="false" datakeynames="personid" datasourceid="mysource" width="366px" cellpadding="4" forecolor="#333333" gridlines="none">
<columns>
<asp:commandfield showselectbutton="true" />
<asp:boundfield datafield="personid" headertext="personid" insertvisible="false"
readonly="true" sortexpression="personid" />
<asp:boundfield datafield="name" headertext="name" sortexpression="name" />
<asp:templatefield headertext="select">
<itemtemplate>
<asp:checkbox id="chkselect" runat="server" />
</itemtemplate>
<headertemplate>
</headertemplate>
</asp:templatefield>
</columns>
</asp:gridview>
  為了示意性地講解如何得到用戶選擇的checkbox,可以增加一個按鈕,當(dāng)用戶選擇gridview中的選項(xiàng)后,點(diǎn)該按鈕,則可以輸出用戶選了哪些選項(xiàng),在按鈕的click事件中寫入如下代碼:

for (int i = 0; i < gridview1.rows.count; i++)
{
 gridviewrow row = gridview1.rows[i];
 bool ischecked = ((checkbox) row.findcontrol("chkselect")).checked;
 if (ischecked)
 {
  str.append(gridview1.rows[i].cells[2].text);
 }
}
response.write(str.tostring());
  接下來,我們添加一個全選的選擇框,當(dāng)用戶選擇該框時,可以全部選擇gridview中的checkbox.首先我們在headtemplate中如下設(shè)計(jì):

<headertemplate>
<input id="chkall" runat="server" type="checkbox" />
</headertemplate>
  javascript部分的代碼如下所示:

<script language=javascript>
function selectallcheckboxes(spanchk){
 var oitem = spanchk.children;
 var thebox=(spanchk.type=="checkbox")?spanchk:spanchk.children.item[0];
 xstate=thebox.checked;
 elm=thebox.form.elements;
 for(i=0;i<elm.length;i++)
 if(elm[i].type=="checkbox" && elm[i].id!=thebox.id)
 {
  if(elm[i].checked!=xstate)
  elm[i].click();
 }
}
</script>  三、gridview中刪除記錄的處理

  在gridview中,我們都希望能在刪除記錄時,能彈出提示框予以提示,在asp.net 1.1中,都可以很容易實(shí)現(xiàn),那么在asp.net 2.0中要如何實(shí)現(xiàn)呢?下面舉例子說明,首先在html頁面中設(shè)計(jì)好如下代碼:

<asp:gridview datakeynames="categoryid" id="gridview1" runat="server" autogeneratecolumns="false" onrowcommand="gridview1_rowcommand" onrowdatabound="gridview1_rowdatabound" onrowdeleted="gridview1_rowdeleted" onrowdeleting="gridview1_rowdeleting">
<columns>
<asp:boundfield datafield="categoryid" headertext="categoryid" />
<asp:boundfield datafield="categoryname" headertext="categoryname" />
<asp:templatefield headertext="select">
<itemtemplate>
<asp:linkbutton id="linkbutton1" commandargument='<%# eval("categoryid") %>' commandname="delete" runat="server">delete</asp:linkbutton>
</itemtemplate>
</asp:templatefield>
</columns>
</asp:gridview>
  在上面的代碼中,我們設(shè)置了一個鏈接linkbutton,其中指定了commandname為"delete",commandargument為要刪除的記錄的id編號,注意一旦commandname設(shè)置為delete這個名稱后,gridview中的gridview_rowcommand 和 gridview_row_deleting 事件都會被激發(fā)接者,我們處理其rowdatabound事件中:

protected void gridview1_rowdatabound(object sender, gridviewroweventargs e)
{
 if (e.row.rowtype == datacontrolrowtype.datarow)
 {
  linkbutton l = (linkbutton)e.row.findcontrol("linkbutton1");
  l.attributes.add('onclick", "javascript:return " + "confirm("是否要刪除該記錄? " +
  databinder.eval(e.row.dataitem, "id") + "')");
 }
}
  在這段代碼中,首先檢查是否是datarow,是的話則得到每個linkbutton,再為其添加客戶端代碼,基本和asp.net 1.1的做法差不多。

  之后,當(dāng)用戶選擇了確認(rèn)刪除后,我們有兩種方法對其進(jìn)行繼續(xù)的后續(xù)刪除處理,因?yàn)槲覀儗h除按鈕設(shè)置為delete,方法一是在row_command事件中寫入如下代碼:

protected void gridview1_rowcommand(object sender, gridviewcommandeventargs e)
{
 if (e.commandname == "delete")
 {
  int id = convert.toint32(e.commandargument);
  // 刪除記錄的專門過程
  deleterecordbyid(id);
 }
}
  另外一種方法是使用gridview的row_deletting事件,先在頁面html代碼中,添加<asp:gridview datakeynames="categoryid" id="gridview1" runat="server" autogeneratecolumns="false" onrowcommand="gridview1_rowcommand" onrowdatabound="gridview1_rowdatabound" onrowdeleting="gridview1_rowdeleting">
然后添加row_deleting事件:

protected void gridview1_rowdeleting(object sender, gridviewdeleteeventargs e)
{
 int categoryid = (int) gridview1.datakeys[e.rowindex].value;
 deleterecordbyid(categoryid);
}
  要注意的是,這個必須將datakeynames設(shè)置為要刪除記錄的編號,這里是categoryid.

  小結(jié)

  在本文中,繼續(xù)探討了gridview控件的一些用法,如導(dǎo)出到excel,在刪除記錄時的處理,以及如何訪問gridview中的控件等。
  • 本文來源于網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 上犹县| 斗六市| 四川省| 青海省| 龙泉市| 文登市| 内丘县| 左贡县| 通辽市| 桃源县| 思南县| 河池市| 荣成市| 南皮县| 阜平县| 修文县| 南郑县| 内丘县| 汝州市| 嘉兴市| 孟连| 黄浦区| 邛崃市| 萨嘎县| 昔阳县| 蒲江县| 手游| 正镶白旗| 遂川县| 桂林市| 衡阳市| 湖北省| 丰城市| 建湖县| 昌江| 崇义县| 松阳县| 崇义县| 光泽县| 衡山县| 镇赉县|