using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net;
using System.IO;
using System.Collections.Generic;
using System.Text.RegularExpressions;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public class DataReader
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
"GetRequiredData"#region "GetRequiredData"
public static string GetRequiredData(string Url)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
using (WebClient wc = new WebClient())
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
using (Stream st = wc.OpenRead(Url))
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
using (StreamReader sr = new StreamReader(st, System.Text.Encoding.GetEncoding("gb2312")))
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return sr.ReadToEnd();
}
}
}
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
"Constructor"#region "Constructor"
public DataReader()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.Data = new DataTable();
this.Data.Columns.Add("债券代码");
this.Data.Columns.Add("债券名称");
this.Data.Columns.Add("债券现价");
this.Data.Columns.Add("复利税后收益");
this.Data.Columns.Add("复利税前收益");
this.Data.Columns.Add("单利税后收益");
this.Data.Columns.Add("单利税前收益");
this.Data.Columns.Add("发行日期");
this.Data.Columns.Add("剩余年限");
this.Data.Columns.Add("票面利率");
this.Data.Columns.Add("评级");
this.Data.Columns.Add("担保");
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
"FindMatches"#region "FindMatches"
public static List<string> FindMatches(string findPattern, string input)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
List<string> list = new List<string>();
Regex regex = new Regex(findPattern);
MatchCollection mc = regex.Matches(input);
foreach (Match m in mc)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
string ri = m.Value;
list.Add(ri);
}
return list;
}
public static List<string> FindMatches(string findPattern, string replacePattern, string input)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
List<string> list = new List<string>();
Regex regex = new Regex(findPattern);
MatchCollection mc = regex.Matches(input);
foreach (Match m in mc)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
string ri = m.Value;
string text = Regex.Replace(ri, findPattern, replacePattern);
list.Add(text);
}
return list;
}
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
"Properties"#region "Properties"
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public DataTable Data
{ get; set; }
#endregion
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
"Parse"#region "Parse"
public void Parse()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
string PageContent = GetRequiredData("http://l333.com/stat/Bounds/");
List<string> rows = FindMatches("<tr height=22>(?<joey>[\\s\\S]+?)</tr>", "${joey}", PageContent);
foreach (string row in rows)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
List<string> columns = FindMatches("<td([^>]*)>(?<joey>[\\s\\S]*?)</td>", "${joey}", row);
DataRow dr = this.Data.NewRow();
dr["债券代码"] = columns[0];
dr["债券名称"] = FindMatches("<a([^>]*)>(?<joey>[\\s\\S]*?)</a>", "${joey}", columns[1])[0];
dr["债券现价"] = FindMatches("<b>(?<joey>[\\s\\S]*?)</b>", "${joey}", columns[2])[0];
dr["复利税后收益"] = columns[3];
dr["复利税前收益"] = columns[4];
dr["单利税后收益"] = columns[5];
dr["单利税前收益"] = columns[6];
dr["发行日期"] = columns[7];
dr["剩余年限"] = columns[8];
dr["票面利率"] = columns[9];
dr["评级"] = columns[10];
dr["担保"] = columns[11];
this.Data.Rows.Add(dr);
}
}
#endregion
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public partial class _Default : System.Web.UI.Page
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
protected void Page_Load(object sender, EventArgs e)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (!IsPostBack)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
DataReader dr = new DataReader();
dr.Parse();
gvData.DataSource = dr.Data;
gvData.DataBind();
ViewState["Data"] = dr.Data;
}
else
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
gvData.DataSource = ViewState["Data"] as DataTable;
gvData.DataBind();
}
}
private string GridViewSortDirection
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return ViewState["SortDirection"] as string ?? "ASC"; }
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ ViewState["SortDirection"] = value; }
}
private string ChangeSortDirection()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
switch (GridViewSortDirection)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
case "ASC":
GridViewSortDirection = "DESC";
break;
case "DESC":
GridViewSortDirection = "";
break;
default:
GridViewSortDirection = "ASC";
break;
}
return GridViewSortDirection;
}
private string GridViewSortExpression
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return ViewState["SortExpression"] as string ?? string.Empty; }
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ ViewState["SortExpression"] = value; }
}
protected void gvData_Sorting(object sender, GridViewSortEventArgs e)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
GridViewSortExpression = e.SortExpression;
int pageIndex = gvData.PageIndex;
gvData.DataSource = SortDataTable(gvData.DataSource as DataTable, false);
gvData.DataBind();
gvData.PageIndex = pageIndex;
}
protected void gvData_PageIndexChanging(object sender, GridViewPageEventArgs e)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
gvData.DataSource = SortDataTable(gvData.DataSource as DataTable, true);
gvData.PageIndex = e.NewPageIndex;
gvData.DataBind();
}
protected DataView SortDataTable(DataTable dataTable, bool isPageIndexChanging)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (dataTable != null)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
DataView dataView = new DataView(dataTable);
if (GridViewSortExpression != string.Empty)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (isPageIndexChanging)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
dataView.Sort = string.Format("{0} {1}", GridViewSortExpression, GridViewSortDirection);
}
else
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
dataView.Sort = string.Format("{0} {1}", GridViewSortExpression, GetSortDirection());
}
}
return dataView;
}
else
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return new DataView();
}
}
private string GetSortDirection()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
switch (GridViewSortDirection)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
case "ASC":
GridViewSortDirection = "DESC";
break;
case "DESC":
GridViewSortDirection = "ASC";
break;
}
return GridViewSortDirection;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
<%
@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvData" AutoGenerateColumns="true" AllowPaging="true" PageSize="20"
AllowSorting="true" runat="server"
onpageindexchanging="gvData_PageIndexChanging" onsorting="gvData_Sorting">
<PagerSettings Mode="NumericFirstLast" />
</asp:GridView>
</div>
</form>
</body>
</html>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
posted @
2008-07-22 13:37
N/A2011
阅读(
315)
评论()
编辑
收藏
举报