文章目錄
由於最近開始學寫些asp.net程式,所以對於一小技巧不是很熟悉,因此不斷的從網路上四處收來,自己做個備忘,也許有的朋友也能用得著。
1。不讓GridView的表頭顯示。(來源yanli0823的部落格)
直接使用showHeader =false這個屬性竟然不起任何作用,表頭該有還是有,試了試在後台.cs代碼檔案中用gridview1.ShowHeader = false,這種方式也不可以;
然後使用css樣式,在headerstyle中引用樣式,display:none,這樣達到了我要的效果。代碼:
<headerStyle cssclass="gvHideHeader"/>
css樣式檔案中
.gvHideHeader
{
display:none;
}
2.GridView的HyperLinkField,並讓此超連結帶參數。(來源MSDN)
<asp:boundfield datafield="OrderID"
headertext="Order ID"/>
<asp:boundfield datafield="ProductID"
headertext="Product ID"/>
<asp:hyperlinkfield datatextfield="UnitPrice"
datatextformatstring="{0:c}"
datanavigateurlfields="ProductID"
datanavigateurlformatstring="~\details.aspx?ProductID={0}"
headertext="Price"
target="_blank" />
<asp:boundfield datafield="Quantity"
headertext="Quantity"/>
3。後台擷取 GridView 行資料的常見兩種方式
1).在後台RowCommand 事件中先取得行號,再根據行號去訪問各列的值
在WebControl中,不像WinForm那樣,可以那麼容易的取得行號的
因為Web提交的過程中,Grid都不存在了,對於伺服器上執行的後台代碼當然找不著所謂的e.RowIndex什麼的了
用GridView預設的ButtonField 我找了很多資料,也不知道應該如何取得行號,好像說要在行綁定過程中將行號綁定到
它的CommandArguments中,可以在2.0中,我就沒發現ButtonField有什麼CommandArguments
所以只有用模板列了,用他的例子如下:
aspx中GridView裡如下:
<asp:TemplateField HeaderText="取消發貨" >
<ItemTemplate>
<asp:Button runat="server" Text="取消" CommandName="CancelSend" />
</ItemTemplate>
</asp:TemplateField>
不用任何綁定,在後台如下讀取行號
C#:
if (e.CommandName == "CancelSend")
{
GridViewRow drv = ((GridViewRow)(((Button)(e.CommandSource)).Parent.Parent));
//CommandSource 引起事件的命令源
int RowIndex = drv.RowIndex;
}
做到這裡就覺得奇怪,為什麼用Grid本身的ButtonField不能轉化
用ButtonField讀的時候,CommandSource 為GridView本身,真是奇怪。這樣一來不知道那ButtonField有什麼用。
還有另一種在命令參數中綁定的方法,可以實現,但感覺沒這種方式直接,此處不介紹。
2).通過CommandArgument參數進行傳遞,具體方法如下:
在頁面代碼中,CommandArgument='<%#Eval("ID")+","+Eval("Name")+","+Eval("Age")%>'
後台取值方法如下: object[] arguments = e.CommandArgument.ToString().Split(',');
操作很簡單,現在說一下我理解的原理。
CommandArgument是一個object類型的屬性,要傳多個參數只能靠字串拼接然後在後台拆分。
還好,asp.net Eval方法很容易完成這樣的功能,在CommandArgument='<%#Eval("ID")+","+Eval("Name")+","+Eval("Age")%>'中
執行過程如下,先分別對Eval進行綁定,然後把<%# %>裡的東西ToString一下,再封裝成object進行傳遞。
不信你可以試試用這種方式CommandArgument='<%#Eval("ID"),Eval("Name"),Eval("Age")%>'
執行時就會報錯“ToString”方法沒有採用“4”個參數的重載,為什麼了?
按上面的原理,假如id=1,name=kuitar,age=24. 則後一種方式<%# %>裡的內容為"1","kuitar","25"
現在ToString("1","kuitar","25",''可能還有個另外的參數,呵呵'),顯然會出錯。
而用第一種方式則不一樣,綁定後<%# %>裡的內容為"1,kuitar,25",因為+號起了作用。這時候ToString應該沒有問題了。
4.GridView中HyperLinkField傳遞兩個以上參數( 鬧市靜屋, 木子屋)
1).在項目中,採用資料控制項的時候,我們有時要傳遞多個參數,不一定是資料表中的欄位,也可能是頁面中的值.雖然要實現有很多種方法,我這裡給出一種 我在項目中使用的方法,方法很簡單。
我是通過HyperLinkField,然後在綁定資料控制項之前將HyperLinkField的DataNavigateUrlFormatString屬性賦上URL,具體寫法如下:
((HyperLinkField)GridView1.Columns[i]).DataNavigateUrlFormatString="...?id={}&str="+str.
i為HyperLinkField在GridView1中的序號,str為變數。
該代碼一定要在GridView1Binder 方法之前。
2).很多時候一個連結通常帶有好幾個參數,形如:http://www.mzwu.com/article.asp?u_id=1&id=1197, 怎麼讓HyperLinkField的連結也帶多個參數呢?很簡單,只須在其DataNavigateUrlFields屬性中設定多個欄位(用逗號分 隔),然後在屬性DataNavigateUrlFormatString中使用{0}、{1}、{2}等來表示欄位值即可。
5.如何為GridView添加一個複選框,實現效果:點擊header上的複選框實現所有按鈕的全部選中或全部不選中。
1)、 首先在GridView中添加一個繫結資料行。什麼也不寫預覽後的的效果如下
如何為資料項目添加CheckBox:寫到後台代碼的RowDataBound事件中:
事件代碼:
為項添加CheckBox後在瀏覽器查看:
為Header添加CheckBox,代碼也是寫在RowDataBound()事件中實現代碼為本圖片的最後一個方法,判斷Header,只需要進行一層if判斷即可:
在瀏覽器中瀏覽效果如下:
2、 在RowDataBound事件中寫代碼,我們一定要知道GridView的結構,GridView本身是一個非常大的對象了,裡面每一行Row是一個對象,行中每一個Cell格也是一個對象。
格中的內容分為兩種情況:一種是綁定顯示的文字,一種是控制項,例如超連結按鈕,CheckBox等等,如何在RowDataBound中找到這些對象:e.Row.Cells[].FindControl(0),裡面放一個控制項的索引號。
如果想要實現CheckBox的全選,JavaScript是必不可少的,這裡我們可以單獨建立一個JS檔案,然後把需要寫的JavaScript代碼放到這個檔案中,然後把這個JS檔案匯入到我們的網頁當中即可,代碼如下:
這樣就實現了全選的效果了: