Gridview一行中显示两组数据的以及相关控件的特征
2010-10-20 17:08
369 查看
protected void gdvOrder_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType.ToString() == "Header")//判断是不是加载到gridview的标题 {//类别 名称 单价 数量 订购 e.Row.Controls.Clear();//清空标题行的所有子控件 TableCell tc = new TableCell();//建立一个TableCell类 tc.Text = "类别"; TableCell tc1 = new TableCell(); tc1.Text = "名称"; TableCell tc2 = new TableCell(); tc2.Text = "单价"; TableCell tc3 = new TableCell(); tc3.Text = "数量"; TableCell tc4 = new TableCell(); tc4.Text = "订购"; TableCell tc5 = new TableCell();//建立一个TableCell类 tc5.Text = "类别"; TableCell tc6 = new TableCell(); tc6.Text = "名称"; TableCell tc7 = new TableCell(); tc7.Text = "单价"; TableCell tc8 = new TableCell(); tc8.Text = "数量"; TableCell tc9 = new TableCell(); tc9.Text = "订购"; e.Row.Controls.AddAt(0, tc); e.Row.Controls.AddAt(1, tc1); e.Row.Controls.AddAt(2, tc2); e.Row.Controls.AddAt(3, tc3); e.Row.Controls.AddAt(4, tc4); e.Row.Controls.AddAt(5, tc5); e.Row.Controls.AddAt(6, tc6); e.Row.Controls.AddAt(7, tc7); e.Row.Controls.AddAt(8, tc8); e.Row.Controls.AddAt(9, tc9); } } protected void gdvOrder_DataBound(object sender, EventArgs e) { int j = 0;//定义一个变量,该变量用来标记新创建的行数 int iCount = this.gdvOrder.Rows.Count / 2;//标记行显示两条数据需要多少 for (int i = 0; i < iCount * 2; i++)//重写可以写2条数据的数据行 { TableCell tc = new TableCell();//初始化一个TableCell类 tc.Text = this.gdvOrder.Rows[i].Cells[0].Text;//把第I行的 TableCell tc1 = new TableCell();//初始化一个TableCell类 tc1.Text = this.gdvOrder.Rows[i].Cells[1].Text;//把第I行的 TableCell tc2 = new TableCell();//初始化一个TableCell类 tc2.Text = this.gdvOrder.Rows[i].Cells[2].Text;//把第I行的 TableCell tc3 = new TableCell();//初始化一个TableCell类 TextBox txt= new TextBox(); txt.Text ="1";//把第I行的 txt.Width = 30; tc3.Controls.Add(txt); TableCell tc4 = new TableCell();//初始化一个TableCell类 CheckBox chk = new CheckBox(); tc4.Controls.Add(chk); if (i % 2 == 0)//判断写到GRIDView的那个列上 { this.gdvOrder.Rows[i].Controls.Clear(); this.gdvOrder.Rows[j].Controls.AddAt(0, tc); this.gdvOrder.Rows[j].Controls.AddAt(1, tc1); this.gdvOrder.Rows[j].Controls.AddAt(2, tc2); this.gdvOrder.Rows[j].Controls.AddAt(3, tc3); this.gdvOrder.Rows[j].Controls.AddAt(4, tc4); } if (i % 2 == 1)//判断写到GRIDView的那个列上 { this.gdvOrder.Rows[i].Controls.Clear(); this.gdvOrder.Rows[j].Controls.AddAt(5, tc); this.gdvOrder.Rows[j].Controls.AddAt(6, tc1); this.gdvOrder.Rows[j].Controls.AddAt(7, tc2); this.gdvOrder.Rows[j].Controls.AddAt(8, tc3); this.gdvOrder.Rows[j].Controls.AddAt(9, tc4); j++; } } for (int i = iCount * 2; i < this.gdvOrder.Rows.Count; i++)//重写可以写2条数据的数据行 { TableCell tc = new TableCell();//初始化一个TableCell类 tc.Text = this.gdvOrder.Rows[i].Cells[0].Text;//把第I行的 TableCell tc1 = new TableCell();//初始化一个TableCell类 tc1.Text = this.gdvOrder.Rows[i].Cells[1].Text;//把第I行的 TableCell tc2 = new TableCell();//初始化一个TableCell类 tc2.Text = this.gdvOrder.Rows[i].Cells[2].Text;//把第I行的 TableCell tc3 = new TableCell();//初始化一个TableCell类 TextBox txt = new TextBox(); txt.Text = "1";//把第I行的 txt.Width = 30; tc3.Controls.Add(txt); TableCell tc4 = new TableCell();//初始化一个TableCell类 CheckBox chk = new CheckBox(); tc4.Controls.Add(chk); if (i % 2 == 0)//判断写到GRIDView的那个列上 { this.gdvOrder.Rows[i].Controls.Clear(); this.gdvOrder.Rows[j].Controls.AddAt(0, tc); this.gdvOrder.Rows[j].Controls.AddAt(1, tc1); this.gdvOrder.Rows[j].Controls.AddAt(2, tc2); this.gdvOrder.Rows[j].Controls.AddAt(3, tc3); this.gdvOrder.Rows[j].Controls.AddAt(4, tc4); } if (i % 2 == 1)//判断写到GRIDView的那个列上 { this.gdvOrder.Rows[i].Controls.Clear(); this.gdvOrder.Rows[j].Controls.AddAt(5, tc); this.gdvOrder.Rows[j].Controls.AddAt(6, tc1); this.gdvOrder.Rows[j].Controls.AddAt(7, tc2); this.gdvOrder.Rows[j].Controls.AddAt(8, tc3); this.gdvOrder.Rows[j].Controls.AddAt(9, tc4); j++; } } } /////////////////////////////////////// <asp:GridView ID="gdvOrder" runat="server" CssClass="9size" AutoGenerateColumns="False" Width="100%" DataKeyNames="food_id" DataSourceID="SqlDataSource1" OnDataBound="gdvOrder_DataBound" OnRowCreated="gdvOrder_RowCreated"> <Columns> <asp:BoundField DataField="food_type" HeaderText="类别" SortExpression="food_type" /> <asp:BoundField DataField="food_name" HeaderText="名称" SortExpression="food_name" /> <asp:BoundField DataField="food_price" HeaderText="价格" SortExpression="food_price" /> <asp:TemplateField HeaderText="数量"> <ItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Width="30">1</asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="订购"> <ItemTemplate> <asp:CheckBox ID="chk" runat="server" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
本来把数据用Gridview一行中显示两组数据的,结果发现,这样一来操作就不太方便了的,目前还没解决此问题,次方法只用来显示数据还是可以的。
在网上查了一下:
列表类
GridView 控件
GridView 控件以表的形式显示数据,并提供对列进行排序、分页、翻阅数据以及编辑或删除单个记录的功能。
特征:一行一条记录,就像新闻列表一样;带分页功能。
DataGrid 控件(建议用 GridView 控件代替)
没有出现 GridView 之前,就用 DataGrid。除了添加利用数据源控件功能的新功能,GridView 控件还实现了某些改进,例如,定义多个主键字段的功能、使用绑定字段和模板的改进用户界面自定义以及用于处理或取消事件的新模型。
DataList 控件
DataList 控件以表的形式呈现数据,通过该控件,您可以使用不同的布局来显示数据记录,例如,将数据记录排成列或行的形式。您可以对 DataList 控件进行配置,使用户能够编辑或删除表中的记录。(DataList 控件不使用数据源控件的数据修改功能;您必须自己提供此代码。)DataList 控件与 Repeater 控件的不同之处在于:DataList 控件将项显式放在 HTML 表中,而 Repeater 控件则不然。
特征:一行可以有多条记录,就像图片列表一样;分页功能需要手写。
Repeater 控件
Repeater 控件使用数据源返回的一组记录呈现只读列表。与 FormView 控件类似,Repeater 控件不指定内置布局。您可以使用模板创建 Repeater 控件的布局。
特征:自由定制;分页功能需要手写。
ListView 控件
这个控件既可实现像 GridView 一样的效果,也可实现像 DataList 一样的效果(怪不得名字叫 ListView),这东西应用起来也要复杂些。要点是:LayoutTemplate 下面必须有一个服务器端控件,即 runat="server",其 ID 必须为 itemPlaceholder(除非更改 ListView 的 ItemPlaceholderID),注意大小写,ItemTemplate 模板中的内容输出时就是插入到 itemPlaceholder 的。
但 ListView 分页却不是那么复杂,在 LayoutTemplate 模板中拖入一个 DataPager 控件,指定好 DataPager 的 Fields 就可以了。但 DataPager 并不会向 DataSource 发送 startRowIndex 和 maximumRows 这两个参数,也就是说这种分页是取出所有的记录,只是显示部分,并不是一种高效的分页。
特征:自由定制,功能强大;应用复杂;分页功能需要手写。
详细类
DetailsView 控件
DetailsView 控件一次呈现一条表格形式的记录,并提供翻阅多条记录以及插入、更新和删除记录的功能。DetailsView 控件通常用在主/详细信息方案中,在这种方案中,主控件(如 GridView 控件)中的所选记录决定了 DetailsView 控件显示的记录。
特征:一条记录,一行一个字段;带分页功能。
FormView 控件
FormView 控件与 DetailsView 控件类似,它一次呈现数据源中的一条记录,并提供翻阅多条记录以及插入、更新和删除记录的功能。不过,FormView 控件与 DetailsView 控件之间的差别在于:DetailsView 控件使用基于表格的布局,在这种布局中,数据记录的每个字段都显示为控件中的一行;而 FormView 控件则不指定用于显示记录的预定义布局。实际上,您将创建包含控件的模板,以显示记录中的各个字段。该模板包含用于设置窗体布局的格式、控件和绑定表达式。
特征:一条记录,自由定制;带分页功能。
相关文章推荐
- 加载数据库表全部数据到GridView控件,但通过查询条件在GridView显示一行或几行数据
- Xml文件的读取以及通过GridView控件利用视图过滤器查询显示数据
- .NET 使用GridView控件绑定数据源其他操作(查询相关数据,而不是显示全数据)
- 解决ScrollView下嵌套ListView/GridView进页面不在顶部的问题以及数据显示不全的问题( 只显示一行)
- 解决WinForm中ComboBox控件的“设置"DataSourse”属性后无法修改项集合”以及两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题
- Jquery ajax请求data显示在GridView上,点击GridView中的任何一行alert这行数据
- ASP.NET 当GridView中没有数据的时候,显示标题栏 并且给出一行数据提示 (两种方法)
- 用javascript把同一行中内容相同的单元格合并。— — — —即GridView中没有数据时,显示“抱歉,没有数据。”
- GridView控件中加入delete操作,超级链接链, 数据库中查数据在单独页面显示 ,后退按钮HyperLink
- ScrollView嵌套ListView,gridView只显示一行解决方案 (以及计算显示高度错误问题)
- 为 GridView、DetailsView、FormView 等数据显示控件删除功能添加“确认对话框”
- GridView控件在没有数据时显示表头和没有数据
- GridView更新某(个)些指定单元格以及在编辑模式下无刷新显示隐藏单元格内某控件
- GridView控件在没有数据时显示表头和没有数据
- 扩展 GridView 控件 - 无数据时显示标题列 : C# Version
- ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
- 在Gridview控件中点击删除链接,删除一行数据
- 在ASP.NET中使用ObjectDataSource数据控件和GridView显示数据(2)
- 解决GridView与scrollview嵌套时GridView显示一行数据
- 扩展 GridView 控件 - 无数据时显示标题列