在DATAGRID中使用分类标题

此博客为转载内容,转载自https://www.cnblogs.com/powerlc/archive/2005/03/09/115565.html ,涉及数据库和UI方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是一个示例图:DataGrid.JPG
既有两个表,其中一个是大类表,还有一个是小类表。比如在使用ms sql server的Northwind数据库时,在product产品表中,每一个产品都是属于一个类别,这些类别在category表中定义。那么我们可以按照category表中类别的顺序,在DATAGRID中显示每个类别有哪些产品。
在这个DATAGRID中,蓝色的行标题是一个分类标题,分类标题以下的就是该分类下的所有代管人员了。
首先:建立一个--DataGrid--
None.gif<asp:DataGrid id="dg_CusInfo" runat="server" CssClass="GbText" BorderColor="#CCCCCC" BorderStyle="None"
None.gif                                    BorderWidth
="1px" BackColor="White" CellPadding="3" AutoGenerateColumns="False" Width="100%"
None.gif                                    DataKeyField
="EmpTypeID">
None.gif                                    
<FooterStyle ForeColor="#000066" BackColor="White"></FooterStyle>
None.gif                                    
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#669999"></SelectedItemStyle>
None.gif                                    
<ItemStyle ForeColor="#000066"></ItemStyle>
None.gif                                    
<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#006699"></HeaderStyle>
None.gif                                    
<Columns>
None.gif                                        
<asp:BoundColumn DataField="EmpTypeName" HeaderText="代管人员"></asp:BoundColumn>
None.gif                                        
<asp:BoundColumn DataField="EmpTypeKinds" HeaderText="类 型">
None.gif                                            
<HeaderStyle HorizontalAlign="Center" Width="10%"></HeaderStyle>
None.gif                                            
<ItemStyle HorizontalAlign="Center"></ItemStyle>
None.gif                                        
</asp:BoundColumn>
None.gif                                        
<asp:BoundColumn DataField="CreateDate" HeaderText="创建时间" DataFormatString="{0:yyyy-MM-dd}">
None.gif                                            
<HeaderStyle HorizontalAlign="Center" Width="12%"></HeaderStyle>
None.gif                                            
<ItemStyle HorizontalAlign="Center"></ItemStyle>
None.gif                                        
</asp:BoundColumn>
None.gif                                        
<asp:TemplateColumn ItemStyle-HorizontalAlign="Center">
None.gif                                            
<HeaderStyle HorizontalAlign="Center" Width="5%"></HeaderStyle>
None.gif                                            
<ItemTemplate>
None.gif                                                
<asp:LinkButton runat="server" Text="进入" CommandName="" CausesValidation="false" CssClass="buttoncss"></asp:LinkButton>
None.gif                                            
</ItemTemplate>
None.gif                                        
</asp:TemplateColumn>
None.gif                                    
</Columns>
None.gif                                    
<PagerStyle HorizontalAlign="Left" ForeColor="#000066" BackColor="White" Mode="NumericPages"></PagerStyle>
None.gif                                
</asp:DataGrid>

然后信息绑定 到DataGrid中
ContractedBlock.gifExpandedBlockStart.gifdg_CusInfo信息绑定#region dg_CusInfo信息绑定
InBlock.gif        
public void CusInfoBind()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
string ID=Session["userid"].ToString();
InBlock.gif            
string type=Session["type"].ToString();
InBlock.gif            
string strSQL = "select EmpTypeName,EmpTypeID,EmpTypeKinds,CreateDate,NameChina from Cus_EmpTypeInfo,CustomerInfo where CusID=CustomerID order by Cus_EmpTypeInfo.CusID";

InBlock.gif            
DbTools db = new DbTools(); //建立数据库连接对象;
InBlock.gif
            DataSet ds = new DataSet();
InBlock.gif            
ds = db.DataSetResult(strSQL,par);
InBlock.gif            
string curCat;//指示当前记录中产品所属的类别
InBlock.gif
            string prevCat = null;//指示上一条记录中产品所属的类别
InBlock.gif
            int i = 0;
InBlock.gif
InBlock.gif            
//遍历结果集,找出要插入分类标题的行
InBlock.gif
            while ( i<= ds.Tables[0].Rows.Count-1 )
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                curCat 
= ds.Tables[0].Rows[i]["NameChina"].ToString();
InBlock.gif                
if ( curCat != prevCat)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{//如果发现前后两记录的所属类别不一样
InBlock.gif
                    prevCat = curCat;
InBlock.gif                    DataRow shRow 
= ds.Tables[0].NewRow();
InBlock.gif                    shRow["EmpTypeName"= ds.Tables[0].Rows[i]["NameChina"].ToString();//修改行的标题为分类标题名
InBlock.gif
                    shRow["EmpTypeKinds"= "SubHead";
//设置一个临时的标记,为判断合并作准备
InBlock.gif
                    shRow["CreateDate"= "1900-1-1";
InBlock.gif                    shRow[
"EmpTypeID"= 1;
InBlock.gif                    ds.Tables[
0].Rows.InsertAt(shRow,i);//插入新的分类标题行
InBlock.gif
                    i += 1;
ExpandedSubBlockEnd.gif                }

InBlock.gif                i 
+= 1;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
this.dg_CusInfo.DataSource = ds;
InBlock.gif            
this.dg_CusInfo.DataBind();
InBlock.gif            db.Close();
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif        
#endregion
shRow("UnitPrice") = "SubHead",是为了在item_bound事件中判定是否要合并整个行!

其item_bound事件中
ContractedBlock.gifExpandedBlockStart.gifdg_CusInfo相关事件#region dg_CusInfo相关事件
InBlock.gif        
private void dg_CusInfo_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                 
  if ( e.Item.Cells[1].Text.Equals("SubHead"))
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{  //设置列宽
InBlock.gif
                    e.Item.Cells[0].ColumnSpan = 4;
InBlock.gif                    
//合拼为一个新的分类标题行,移除其中的单元格
InBlock.gif
                    e.Item.Cells.RemoveAt(3);
InBlock.gif                    e.Item.Cells.RemoveAt(
2);
InBlock.gif                    e.Item.Cells.RemoveAt(
1);
InBlock.gif                    e.Item.Cells[
0].Attributes.Add("align","left");
InBlock.gif                    e.Item.Cells[
0].Font.Bold = true;
InBlock.gif                    e.Item.BackColor 
= Color.FromArgb(204,204,255);
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif        
#endregion



转载于:https://www.cnblogs.com/powerlc/archive/2005/03/09/115565.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值