ASP.NET网页设计在DATAGRID中利用分类题目
今天去面试,被问到C#中的new关键字,看了那么多的书对new关键字还是有一定认识,回来又把new复习了一遍,发现了许多以前还不知道的细节。datagrid 在asp.net中,DATAGRID是利用频次对照高的控件,而在一样平常使用中,怎样在DATAGRID中利用分类题目呢?甚么是分类题目呢?举个例子,我们在利用DATAGRID时,都以必定的按次来显现有关的数据,好比在利用mssqlserver的Northwind数据库时,在product产物表中,每个产物都是属于一个种别,这些种别在category表中界说。那末我们能够依照category表中种别的按次,在DATAGRID中显现每一个种别有哪些产物。
从下面的图中,能够看出,在这个DATAGRID中,蓝色的行题目是一个分类题目,很分明地指出商品所属的种别,分类题目以下的就是该分类下的一切商品了。
好吧,讲了这么多,让我们一步步来入手下手计划咯。(上面的内容假定列位都开端把握了VS.NET的基础操纵,有asp.net和VB.NET的开端常识)。
起首,我们创建一个名为subheading的工程,选用VB.NET。以后增加一个datagrid,并修正其html代码以下:
<?XML:NAMESPACEPREFIX=ASP/><ASP:BOUNDCOLUMNDataField="UnitsInStock"HeaderText="StockLevel"></ASP:BOUNDCOLUMN>
目标是在datagrid中设置绑定的几列,注重,要把datagrid中AutoGenerateColumns属性设置为False.以后,我们由于一阵要写ItemDataBound事务,以是持续编纂代码以下:
ForeColor="Black"BackColor="White"CellPadding="3"
GridLines="None"CellSpacing="1"
OnItemDataBound="DataGrid1_ItemDataBound">
以后我们再看下怎样写逻辑部分的代码。实在做分类题目的历程很复杂,历程为:
用SQL语句从数据库读取product表的数据,以后放到dataset的默许datatable中往,
然后反省每个产物所属的种别,假如发明某一个产物的种别和前一笔记录中产物所属的种别纷歧样的话,那末就能够一定以后产物是属于一个新的分类了,就能够拔出新的行,而且加以润色,成为分类题目。
上面先看page_load()的代码:
PrivateSubPage_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)
HandlesMyBase.Load
DimConnectionStringAsString
ConnectionString="server=localhost;database=northwind;UID=sa"
DimCommandTextAsString="SelectCategoryName,ProductName,"&_
"Cast(UnitPriceasvarchar(50))asUnitPrice,UnitsInStock"&_
"fromProducts"&_
"INNERJOINCategoriesOn"&_
"Products.categoryID=Categories.CategoryID"&_
"orderbyProducts.categoryID"
DimmyConnectionAsNewSqlConnection(ConnectionString)
DimmyCommandAsNewSqlDataAdapter(CommandText,myConnection)
DimdsAsNewDataSet()
myCommand.Fill(ds)
DimcurCatAsString‘唆使以后纪录中产物所属的种别
DimprevCatAsString‘唆使上一笔记录中产物所属的种别
DimrowAsTableRow‘要拔出分类题目的行
DimiAsInteger=0‘要拔出分类题目行的地位,用I暗示
遍历了局集,找出要拔出分类题目的行
DoWhilei<=ds.Tables(0).Rows.Count-1
curCat=ds.Tables(0).Rows(i).Item("CategoryName")
IfcurCatprevCatThen
‘假如发明前后两纪录的所属种别纷歧样
prevCat=curCat
DimshRowAsDataRow=ds.Tables(0).NewRow
shRow("ProductName")=ds.Tables(0).Rows(i).Item(0)
‘修正行的题目为分类题目名
shRow("UnitPrice")="SubHead"‘设置一个一时的标志
ds.Tables(0).Rows.InsertAt(shRow,i)‘拔出新的分类题目行
i+=1
EndIf
i+=1
Loop
DataGrid1.DataSource=ds
DataGrid1.DataBind()
EndSub
在下面的page_load事务中,起首是用SQL语句,对product表和Category表举行毗连,得出的了局集是在Category表中每一个种别的一切产物,以后对了局集举行遍历,然后反省每个产物所属的种别,假如发明某一个产物的种别和前一笔记录中产物所属的种别纷歧样的话,那末就能够一定以后产物是属于一个新的分类了,就能够拔出新的行做为分类题目行,而在新拔出的行中,我们写了一句shRow("UnitPrice")="SubHead",这是为何呢?
这实在只是一个一时的标志罢了,由于新拔出的分类题目行是和一般的行分歧的,我们要设置其款式,因而在其item_bound事务中,代码以下:
PrivateSubDataGrid1_ItemDataBound(senderAsObject,eAsDataGridItemEventArgs)
SelectCasee.Item.ItemType
CaseListItemType.AlternatingItem,ListItemType.Item
’假如发明是分类题目行的话,则对其举行格局化
Ife.Item.Cells(1).Text.Equals("SubHead")Then
’设置列宽
SetthecelltoaColSpanof3
e.Item.Cells(0).ColumnSpan=3
‘合拼为一个新的分类题目行,移除个中的单位格
e.Item.Cells.RemoveAt(2)
e.Item.Cells.RemoveAt(1)
e.Item.Cells(0).Attributes.Add("align","Left")
e.Item.Cells(0).Font.Bold=True
e.Item.BackColor=Color.FromArgb(204,204,255)
EndIf
EndSelect
EndSub
最初,别健忘了ImportsSystem.Data.SqlClient。
本程序在win2000server+vs.net2002下经由过程,也能够在vs.net2003下运转。
无论谁倒了对双方阵营的粉丝们也是有害无益。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.ckuyun.com),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。 但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
页:
[1]