A basic example for the dataGrid to show the info from DB:
<%@ Import NameSpace="System.Data"%>
<%@ Import NameSpace="System.Data.SqlClient"%>
<!DOCTYPE HTML PUBLIC "-//W 3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="MyDataGrid" style="Z-INDEX: 101; LEFT: 32px; POSITION: absolute; TOP: 32px"
runat="server" Width="168px" Height="120px"></asp:DataGrid>
</form>
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
if(!IsPostBack){
//step 1:create connection
string strconn= ConfigurationSettings.AppSettings["dsn"];
SqlConnection conn=new SqlConnection(strconn);
string queryGoods=" select * from goods ";
try{
//step 2:open the connection
conn.Open();
//step 3:create sql command
SqlCommand comd=new SqlCommand(queryGoods,conn);
//step 4:deal with the result
SqlDataReader reader=comd.ExecuteReader();
//bind the result to the datagrid
MyDataGrid.DataSource=reader;
MyDataGrid.DataBind();
}
catch (SqlException se1){
Console.WriteLine(se1.Message);
}
finally{
//step 5:close the connection
conn.Close();}
}
}
</script>
</body>
</HTML>
pay attention to :
web.config 里的配置 add blow:
<appSettings>
<add key="dsn" value="persist security info=False;Integrated Security=SSPI;server=localhost;Trusted_Connection=true;DATABASE=WMS"/>
</appSettings>
如何使用6个内置ASP对象?
答:ASP提供了多个内嵌对象,无须建立就可以在指令中直接访问和使用它们,这六个对象主要有:请求(Request)对象、响应(Response)对象、工作阶段(Session)对象、应用程序(Application)对象、服务器(Server)对象、Cookies对象,这六个对象中的服务器(Server)对象可加载其他组件,这可以扩展ASP的功能。
使用Server.CreateObject所建立的对象,它的生命周期在它建立时开始,在它所在的网页程序结束时结束。如果想要让该对象跨网页使用,则可以用Session对象来记录Server.CreateObject所建立的对象。
一些关于dataGrid 很好的文章:
DataGrid Web控件深度历险(3) part1: http://dev.csdn.net/article/26/26249.shtm
这个是翻译过来的文章,思路很清晰
ado.net 数据库的两种方式:
方式一: System.Data.SqlClient(主要依靠) | 方式二System.Data(主要依靠) |
Step 1 //step 1:create connection string strconn= ConfigurationSettings.AppSettings["dsn"]; SqlConnection conn=new SqlConnection(strconn);
web.config 里的配置 add blow:
<appSettings> <add key="dsn" value="persist security info=False;Integrated Security=SSPI;server=localhost;Trusted_Connection=true;DATABASE=WMS"/> </appSettings>
| //step 1: conn SqlDataAdapter adapter=new SqlDataAdapter(" select * from goods ", "persist security info=False;Integrated Security=SSPI;server=localhost;Trusted_Connection=true;DATABASE=WMS" ); |
Step2:
try{ //step 2:open the connection
conn.Open(); | //step 2: DataSet ds=new DataSet(); |
//step 3:create sql command SqlCommand comd=new SqlCommand(queryGoods,conn); | //step 3: adapter.Fill(ds); |
//step 4:deal with the result SqlDataReader reader=comd.ExecuteReader(); | ds.Tables[0] |
//step 5:close the connection conn.Close(); |
|
这个模式基本和JDBC一样.只不过语句里的单词不一样
| 这种模式没有打开和关闭,而且不需要catch异常?DataSet 是内存中的数据库,可以容纳多个表,甚至是约束和关系.DataSet 和DataAdapter 配合使用 |
显示查询出来的部分属性:
首先在 properties 里 设置behavior 中的 Auto Generate cloumns 设置为flase.即禁止自动产生查询出来的资料.然后修改html显示部分的代码:
<Columns>
<asp:BoundColumn DataField="GName" HeaderText="Goods Name"></asp:BoundColumn>
<asp:BoundColumn DataField="GPrice" HeaderText="Goods Price"></asp:BoundColumn>
<asp:BoundColumn DataField="GProvider1" HeaderText="Primary Goods Provider"></asp:BoundColumn>
<asp:ButtonColumn Text="Delete" HeaderText="Primary Goods Provider"></asp:ButtonColumn>
</Columns>
这些是添加的,其它部分不变. 其中BoundColumn 控件是绑定查询出来的属性,而ButtonColumn控件是添加额外我们定义的删除等….但是没有图形化的拖拽,必须自己写代码来实现?
默认查询出来的东西是以数据中记录的形式排序的,如果想以我们自己的方式进行排序,那么,需要使用
System.Data.DataView
下边的代码也要修改成:
DataView view=new DataView(ds.Tables[0]);
view.Sort="GPrice ASC";
MyDataGrid .DataSource=view;
MyDataGrid.DataBind();
我们前面所学的 MyDataGrid ds=dataReader;
如果单击某行,排序的话,需要添加一个OnSortCommand=”method” 属性.然后编写method方法
还要讲AllowSorting 属性设置为true.也在behavior里.
dataGrid 的分页
我们需要做的是:
1. 在asp:DataGrid里设置:
AllowPaging="True" PageSize="2" OnPageIndexChanged="OnNewPage"
分别代表的含义是: 允许分页, 分页的记录条数, 分页的时候所用的方法
接着编写分页的OnNewPage 的方法:
void OnNewPage(Object sender, DataGridPageChangedEventArgs e)
{
MyDataGrid.CurrentPageIndex=e.NewPageIndex;
SqlDataAdapter adapter=new SqlDataAdapter(" select * from goods ", "persist security info=False;Integrated Security=SSPI;server=localhost;Trusted_Connection=true;DATABASE=WMS" );
//step 2:
DataSet ds=new DataSet();
//step 3:
adapter.Fill(ds);
DataView view=new DataView(ds.Tables[0]);
view.Sort="GPrice ASC";
MyDataGrid .DataSource=view;
MyDataGrid.DataBind();
}
MyDataGrid.CurrentPageIndex=e.NewPageIndex;
当前的页数以新的一页开始.这个是必须的,其它的与我们没分页的一样,copy 上去就可以了
这样是可以实现分页了,但是上一页,下一页都是< >不舒服,怎么办
1.PagerStyle-PrevPageText="上一頁" PagerStyle-NextPageText="下一頁" 2.PagerStyle-Mode="NumericPages"
1.表示用汉字替代<>
2.表示显示每一页,原先我看到很多网站是显示的123456789…等页,如果用我笨笨的JSP 方法去分页岂不是累死人了?!
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Web.UI.WebControls.Style
System.Web.UI.WebControls.TableItemStyle
System.Web.UI.WebControls.DataGridPagerStyle
关于分页性能提升的属性: AllowCustomPaging
在分页的时候,只获取当前页面的分页记录
DataGrid 控件是相当重要的,也是webControls 里最复杂的控件,现在已经掌握了最基本的用法,以后用到要进一步深层次研究.比如需要效率高的分页的时候,需要点击某row 按顺序排列的时候
web controls 控件最复杂的也就是不过如此,看了.net 不难,而且非常好用,开发效率也比较高