您的位置:首页 > 其它

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 控件则不指定用于显示记录的预定义布局。实际上,您将创建包含控件的模板,以显示记录中的各个字段。该模板包含用于设置窗体布局的格式、控件和绑定表达式。

特征:一条记录,自由定制;带分页功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐