2012年7月22日 星期日

如何在提示視窗中顯示 asp.net 控制項

今天聽眾表示說他想要在按鈕上讓滑鼠移過去,出現提視小視窗並讓 asp.net 的控制項 gridview 在裡面顯示。

此次用的資料庫為 northwind,如果您的內容不是控制項而是 HTML,您也可以更換內容,以下為程式碼:

<!--把下面代碼加到<head>與</head>之間-->
    <style type="text/css">
    <!--
    body {
        padding-left:50px;
    }
    a.tip {
        color:red;
        text-decoration: underline;
        position:relative;
    }
    a.tip span{
        display:none; 
    }
    a.tip:hover{
        cursor:hand;
    }
    a.tip:hover .popbox{
        display: block;
        position:absolute;
        padding:10px;
        /* width:100px; 
        height:30px; */
        background:#000000;
        left:60px;
        top:30px;
        color:#FFFFFF;
        text-decoration: none;
    }
    -->
    </style>

...
...
...


<a href="http://www.o-asp.com" class="tip">把滑鼠移上來試試!
    <span class="popbox">
    <!-- 顯示內容開始 -->
    
    
    <asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" 
        CellPadding="4" DataKeyNames="EmployeeID" DataSourceID="northwind" 
        ForeColor="#333333" GridLines="None">
            <AlternatingRowStyle BackColor="White" />
            <Columns>
                <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" 
                    InsertVisible="False" ReadOnly="True" SortExpression="EmployeeID" />
                <asp:BoundField DataField="LastName" HeaderText="LastName" 
                    SortExpression="LastName" />
                <asp:BoundField DataField="FirstName" HeaderText="FirstName" 
                    SortExpression="FirstName" />
                <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
                <asp:BoundField DataField="Region" HeaderText="Region" 
                    SortExpression="Region" />
            </Columns>
            <EditRowStyle BackColor="#2461BF" />
            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#EFF3FB" />
            <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#F5F7FB" />
            <SortedAscendingHeaderStyle BackColor="#6D95E1" />
            <SortedDescendingCellStyle BackColor="#E9EBEF" />
            <SortedDescendingHeaderStyle BackColor="#4870BE" />
        </asp:GridView>
        
        <asp:SqlDataSource ID="northwind" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
        SelectCommand="SELECT [EmployeeID], [LastName], [FirstName], [City], [Region] FROM [Employees]">
    </asp:SqlDataSource>
    
    
    <!-- 顯示內容結束 -->
    </span>
    </a>

回aspnet目錄
回首頁

2012年7月12日 星期四

執行字串內javascript指令

今天工作上遇到,以下做個分享
問題:
A視窗傳FunName給B視窗,然後B視窗去執行A視窗FunName的Function

A.aspx
window.open(B.aspx?FunName=Test);

B.aspx
opener.[FunName]();

各位發現問題了嗎?
B視窗要怎麼將字串內的文字當成指令/Function執行呢?

解法1:
使用setTimeout去執行(setTimeout用法請自行查)
setTimeout("opener." + FunName+ "();",10);
.
.
.


這樣就可以去執行A視窗的Function
但問題來了
如果接下來動作是在A視窗的Function執行完成後才能繼續做
但因為
setTimeout是非同步執行
那最後資料就會不正確
更可能直接Error給你看
這時候該怎麼辦呢?

解法2:
先將完整指令存成字串,再用Eval()去執行
var strFun = "opener." + FunName+ "();";
Eval(strFun);
.
.
.


這樣就會執行完A的Function再執行下面動作

對此問題而言
以上2種方法都可以達到執行字串內javascript指令的動作
差別在於
setTimeout 同時並行、節省執行時間
Eval 執行延續、錯誤排除方便

以上提供給大家參考

回aspnet目錄
回首頁