65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 ASP.Net 和 AJAX 控件进行在线股票流

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.89/5 (6投票s)

2007 年 11 月 27 日

GPL3

2分钟阅读

viewsIcon

47039

本文介绍了如何使用 ASP.Net 和 AJAX 控件进行在线股票流

Online stock streaming

引言

我一直很好奇像 http://finance.yahoo.comhttp://finance.google.com 这样的网站如何快速地在线显示股票报价,并且不刷新整个页面。所以,我决定实现类似的功能。实现这种流媒体似乎非常困难,但 ASP.Net 及其功能丰富的 AJAX 控件使得实现它变得非常简单。这是我第一次尝试构建类似的流媒体网页。这个示例对你来说可能听起来很简单,有些人可能会认为每个人都知道这一点。但对于那些想构建类似的网站,但仍然不知道从哪里开始的人来说,这可能提供了一个很好的基础。

使用代码

本文提供的示例代码包括一个网页 Default.aspx 和 Default.aspx.cs 后台代码。

Default.aspx (UI)

<!--Script Manager must be inserted before any other AJAX control-->
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        
        <!--Ajax update panel-->
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
        
        <!--Grid View which will display quotes-->
        <asp:GridView ID="GridView1" runat="server" Width="800px" BackColor="White" BorderColor="#336666"
            BorderStyle="Double" BorderWidth="3px" CellPadding="4" GridLines="Horizontal">
            <FooterStyle BackColor="White" ForeColor="#333333" />
            <RowStyle BackColor="White" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />
            <PagerStyle ForeColor="White" HorizontalAlign="Center" BackColor="#336666" />
            <HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />
        </asp:GridView>
         
         <!--Ajax Timer control which will refresh grid view at specified interval (2 seconds)-->
         <asp:Timer ID="Timer1" runat="server" Interval="2000" OnTick="Timer1_Tick" Enabled=true >
        </asp:Timer>
        </ContentTemplate>        </asp:UpdatePanel>
  

UI 代码非常简单。第一个组件是脚本管理器 (Script Manager)。此组件是 AJAX 功能所必需的。在脚本管理器之后,下一个组件是 UpdatePanel。此 ajax 控件阻止 ASP.Net 页面回发。它不回发页面,而是使用客户端 javascript 将控件输入发送到服务器。当它收到来自服务器的响应时,它会在客户端刷新其内部内容。下一个控件是 AJAX 计时器控件。它每 2 秒用新的报价重新绑定网格。

Default.aspx.cs (后台代码)

    DataTable GetGridData()
    {
        DataTable DT = new DataTable();
        DT.Columns.Add("Symbol",typeof(string));
        DT.Columns.Add("Company Name",typeof(string));
        DT.Columns.Add("LastTrade", typeof(float));
        DT.Columns.Add("Bid", typeof(float));
        DT.Columns.Add("Ask", typeof(float));
        DT.Columns.Add("Volume", typeof(int));
        DT.Columns.Add("Market Capital", typeof(string));
        DT.Columns.Add("EPS", typeof(float));
        DT.Columns.Add("P/E", typeof(float));

        Random r = new Random();

        //Apple

        //Get a random value of last trade, bid, ask and volume.

        float LastTrade = ((float)r.Next(17222,17434))/100;
        float Bid = LastTrade - (float)0.34;
        float Ask = LastTrade + (float)0.43;
        int Volume = r.Next(23000000, 23600000);
        DT.Rows.Add("AAPL", "Apple Inc.", LastTrade, Bid, Ask, Volume, "153.88B", 3.93, 44.71);

        //Microsoft

        LastTrade = ((float)r.Next(3378, 3487)) / 100;
        Bid = LastTrade - (float)0.34;
        Ask = LastTrade + (float)0.43;
        Volume = r.Next(38064903, 40075689);
        DT.Rows.Add("MSFT", "Microsoft Corporation", LastTrade, Bid, Ask, Volume, "153.88B", 2.13, 21.2);

        //Yahoo

        LastTrade = ((float)r.Next(2520, 2834)) / 100;
        Bid = LastTrade - (float)0.34;
        Ask = LastTrade + (float)0.43;
        Volume = r.Next(14400000, 15500000);
        DT.Rows.Add("YHOO", "Yahoo Inc.", LastTrade, Bid, Ask, Volume, "34.48B", 1.42, 10.23);

        //Google

        LastTrade = ((float)r.Next(67025, 69000)) / 100;
        Bid = LastTrade - (float)5;
        Ask = LastTrade + (float)5;
        Volume = r.Next(4500000, 5000000);
        DT.Rows.Add("GOOG", "Google Inc.", LastTrade, Bid, Ask, Volume, "213.73B", 12.42, 53.23);

        //WYNN

        LastTrade = ((float)r.Next(13249, 14022)) / 100;
        Bid = LastTrade - (float)0.90;
        Ask = LastTrade + (float)0.89;
        Volume = r.Next(1222785, 1400000);
        DT.Rows.Add("WYNN", "Wynn Resorts Ltd.", LastTrade, Bid, Ask, Volume, "15.13B",1.81, 73.15);

        return DT;
    }

GetGridData() 函数模拟不同股票代码的报价。除了模拟数据,您还可以替换此函数以从其他来源获取实时报价。此函数使用随机报价构建一个数据表并返回它。

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        //Bind grid view

        GridView1.DataSource = GetGridData();
        GridView1.DataBind();
    }

Timer1_Tick() 函数是一个计时器函数,每 2 秒执行一次。它使用模拟股票数据重新绑定网格。

关注点

正如您在这里看到的,我正在使用模拟股票报价。了解我们如何从 Yahoo/Google 或任何其他来源获取实时报价会很有趣。

以下是我找到的几个讨论这个问题的链接,
http://tutorials.programmingsite.co.uk/yahoocsv.php http://asp.programmershelp.co.uk/xmlstock1.php
http://www.webdeveloper.com/forum/archive/index.php/t-6821.html
http://aspalliance.com/articleViewer.aspx?aId=112&pId=

如果您有任何其他想法,请在这里发布。


© . All rights reserved.