iT邦幫忙

DAY 10
2

ASP.NET技巧系列 第 13

GridView點選Row任何位置就選擇Part2

(這部分有修正,保留原來的方式,正確的方式請參考本篇最下方!!)

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    '判斷資料列才做事情
    If e.Row.RowType = DataControlRowType.DataRow Then
        '取得LinkButton物件
        Dim lb As LinkButton = e.Row.Cells(0).FindControl("LinkButton1")

        '判斷有取得物件,才做是情
        If lb IsNot Nothing Then

            '取得LinkButton的ClientID
            Dim lbClientId As String = lb.ClientID

            '將底線【_】置換為【$】
            lbClientId = Replace(lbClientId, "_", "$")

            '設定要加上的JavaScript
            Dim tScript As String = ""
            tScript = "__doPostBack('" + lbClientId + "','')"

            '把JavaScript加在Row的【onclick】屬性裡面
            e.Row.Attributes.Add("onclick", tScript)

            '增加變換手指游標,以及背景顏色
            e.Row.Attributes.Add("onmouseover", "this.style.cursor='hand';this.style.backgroundColor='yellow';")
            e.Row.Attributes.Add("onmouseout", "this.style.cursor='';this.style.backgroundColor='';")
        End If
    End If
End Sub

讓【選擇】消失
運作看看,果然是可以了。不過,還有個問題,如果想要讓LinkButton那個【選擇】的字不見,怎麼做??這個當然不能把LinkButton刪除掉,因為我們主要還是透過LinkButton來達到這樣的效果,方式很簡單,讓LinkButton的【選擇】變成空白即可。

<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Select"> </asp:LinkButton>

那麼如果連那個欄位(看起來空的TempleteField)也不要呢,也可以,首先要挑選其中一個欄位轉為TempleteField,例如我選擇EmployeeID,然後把剛剛的LinkButton剪下→貼上到EmployeeID裡面的ItemTemplete就可以囉

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    DataKeyNames="EmployeeID" DataSourceID="SqlDataSource1"
    EmptyDataText="沒有資料錄可顯示。">
    <Columns>
        <asp:TemplateField HeaderText="EmployeeID" SortExpression="EmployeeID">
            <EditItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Eval("EmployeeID") %>'></asp:Label>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("EmployeeID") %>'></asp:Label>
                <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Select"> </asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="LastName" HeaderText="LastName"
            SortExpression="LastName" />
        <asp:BoundField DataField="FirstName" HeaderText="FirstName"
            SortExpression="FirstName" />
    </Columns>
</asp:GridView>

這樣的技巧,其實可以運用在很多地方,讓我們的程式可以設計的更靈活些。提供大家參考


上一篇
如何透過IHttpHandler讓某虛擬目錄中檔案(例如Test.txt)必須登入才可瀏覽(或下載)
下一篇
修改ASP.NET內建驗證機制的密碼規則
系列文
ASP.NET技巧17

尚未有邦友留言

立即登入留言