(收集貼)的一些asp.net小技巧

來源:互聯網
上載者:User
文章目錄

由於最近開始學寫些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檔案匯入到我們的網頁當中即可,代碼如下:


這樣就實現了全選的效果了:


 

 

 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.