1. 程式人生 > >ASP.net的ItemDataBound事件與LinqToSql資料來源關於e.Item.DataItem的型別

ASP.net的ItemDataBound事件與LinqToSql資料來源關於e.Item.DataItem的型別

    CSDN廣告是越來越多了,所有部落格筆記不再更新,新網址 DotNet筆記

一、不管是Repeater還是ListView控制元件,e.Item.DataItem總是習慣性的出現。那麼e.Item.DataItem是什麼?

       他代表了當前正在被“處理”的行。這個“行”只包含資料,不包含控制元件。什麼意思呢?如下:

   <asp:Repeater ID="Repeater1" runat="server" DataSourceID="LinqDataSource1" OnItemDataBound="Repeater1_ItemDataBound">
            <HeaderTemplate>
                <table>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                        <%#Eval("part_code") %>
                    </td>
                    <td>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("stock_num") %>'></asp:TextBox>
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table></FooterTemplate>
        </asp:Repeater>

注:以上程式碼,資料庫中的表名稱為 tbl_stock_dtl

就是說e.Item.DataItem只包含part_code,stock_num這樣的資料欄位,不包含類似TextBox等控制元件。因此,我們可以在ItemDataBound事件裡面通過把e.Item.DataItem轉換為相應的型別來獲取ItemTemplate裡當前對應的資料值,然後進行一些“目的性”的處理。

但是,因為我們使用資料來源的種類不同,所以e.item.DataItem轉換的型別也變得不唯一。

1、使用DataSet繫結資料來源時,用

DataRowView view = (DataRowView)e.Item.DataItem;
var stock_Row=(XXX.XXX.tbl_stock_dtlRow)view.Row;
if(stock_Row.stock_num>0)

{

XXXXX;

}

個人不太喜歡這種方式!

2、使用LinqToSql

大家都知道,在Linq的.dbml檔案中,編譯器把表對映為一個類,其中每條記錄就是一個類物件。如下程式碼,如果庫存(stock_num)為0,就把textBox的邊框變紅。

 protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)//判斷行的型別。
            {
                tbl_stock_dtl drvRow= (tbl_stock_dtl)e.Item.DataItem;//把行裡面的資料轉換為dbml檔案中類的相應物件
                if (drvRow.stock_num==00)
                {
                    TextBox tb = (TextBox)e.Item.FindControl("TextBox1");//模板中的控制元件不能直接通過ID查詢,切記。
                   tb.BorderColor = System.Drawing.Color.Red;
                }
            }
        }

兩種方法,沒有好壞之分!你喜歡什麼酒用什麼。

註釋圖: