|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
今天去面试,被问到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下运转。
无论谁倒了对双方阵营的粉丝们也是有害无益。 |
|