在线等待,在GridView中如何让一条记录按多行显示

时间:2021-01-10 00:27:52
要求数据表的一条记录对应成GridView的两行,例如
姓名      年龄            照片
性别      出生年月 
小王      20
男        1986
小张      21
男        1985
请问改如何实现?

17 个解决方案

#1


使用DataList或者自己构造table

#2


用itemtemplate,

小王      20
男        1986

每一条数据对应一个table不就可以了

#3


GridView是动态绑定的,各个列需要动态生成
现在的做法如下:
BindGridView()
{
TemplateField f1 = new TemplateField();
f1.ItemTemplate = new MultiRowsTemplateRow();
gridView1.Columns.Add(f1);

gridView1.DataSource = ds;
gridView1.DataBind();
}

class MultiRowsTemplateRow : ITemplate
{
public void InstantiateIn(Container container)
{
Label lblBr = new Label();
lblBr.Text = "<br>";
Label lblName1 = new Label();
lblName1.Text = "xiao";
Label lblName2 = new Label();
lblName2.Text = "wang";

container.Controls.Add(lblName1);
container.Controls.Add(lblBr);
container.Controls.Add(lblName2);
}

}

这种方法Label不是从数据库里面取的,怎样实现跟数据源的绑定?
是不是可以用TemplateField里面放两个BoundField来实现?

#4


jsyhello(不认输):
现在程序已经用GridView做了,用别的,改动太大

xyunsh(学海无涯,回头是岸) 
   能说清楚一点吗?GridView各列是动态生成的

#5


没有人做过吗

#6


用模版列再简单不过了。

#7


怎么用?
这些类必须动态添加,因为不同的情况要添加不同的列

#8


把你做的各个列都转换成模版列
然后和DataList中的做法是一样的

#9


能具体一点吗
DataList没有用过

#10


可以将datagrid设一个模板列,模板列中插入table,table中再插入label,在datagrid的itemdatabind中设置label的text就行了

#11


是不是想实现以下样式的啊?
-----------------------------------------------
     姓名    |       年龄        |      照片
     性别    |     出生年月      |
-----------------------------------------------
     姓名    |       年龄        |      照
---------------------------------|      
     性别    |       年月        |      片
-----------------------------------------------
     姓名    |       年龄        |      照
---------------------------------|      
     性别    |       年月        |      片
-----------------------------------------------
.....
如果是,那你应该可以用GridView的模板列来做
只要修改.aspx中的模板就可以了,具体的你去找找帮助,有很详细的使用说明,这不赘述

但看你的样子是在后台处理过再输出的
这样的话,你可以尝试构建一个Table对象(System.Web.UI.HtmlControls.HtmlTable)
你构建好一个类似上面的行列,将你需要的值填充好
直接输出,应该能够达到你的要求

#12


模版列可以定义任何行数

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
  <HeaderTemplate>
    <input type="checkbox" onclick="SelAll()" /></HeaderTemplate>
  <ItemTemplate>
    <input type="checkbox" name="guid" value="<%#Eval("ExpertID") %>" />
  </ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="专家名称" DataField="DisplayName" />
<asp:BoundField HeaderText="专家介绍" DataField="Description" />
<asp:TemplateField>
  <ItemTemplate>
    <table width="100%" border="1">
      <tr>
        <td>
          <%#Eval("DisplayName") %>
        </td>
        <td>
          <%#Eval("DisplayName") %>
        </td>
        <td rowspan="2">
          <%#Eval("DisplayName") %>
        </td>
      </tr>
      <tr>
        <td>
          <%#Eval("DisplayName") %>
        </td>
        <td>
          <%#Eval("DisplayName") %>
        </td>
      </tr>
    </table>
  </ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

#13


用模板

#14


用模版列自定义

#15


to mistysunlight(飘渺日光) 

是的,ItemTemplate是要在后台构建的,以为ItemTemplate的内容不是固定的,有好几种类型
你的意思是不用GridView吗

#16


------------------------------------------




我再说一下我的问题吧
现在TemplateField需要在后台生成(因为TemplateField里面的列不是固定的,有多种类型)
怎么在后台绑定TemplateField的列到数据表的字段
我知道BoundField绑定很简单,
直接BoundField field = new BoundField()
field.DataField = "name";
gridView1.Columns.Add(field);就可以了

TemplateField该怎么做?









------------------------------------------

#17


up

#1


使用DataList或者自己构造table

#2


用itemtemplate,

小王      20
男        1986

每一条数据对应一个table不就可以了

#3


GridView是动态绑定的,各个列需要动态生成
现在的做法如下:
BindGridView()
{
TemplateField f1 = new TemplateField();
f1.ItemTemplate = new MultiRowsTemplateRow();
gridView1.Columns.Add(f1);

gridView1.DataSource = ds;
gridView1.DataBind();
}

class MultiRowsTemplateRow : ITemplate
{
public void InstantiateIn(Container container)
{
Label lblBr = new Label();
lblBr.Text = "<br>";
Label lblName1 = new Label();
lblName1.Text = "xiao";
Label lblName2 = new Label();
lblName2.Text = "wang";

container.Controls.Add(lblName1);
container.Controls.Add(lblBr);
container.Controls.Add(lblName2);
}

}

这种方法Label不是从数据库里面取的,怎样实现跟数据源的绑定?
是不是可以用TemplateField里面放两个BoundField来实现?

#4


jsyhello(不认输):
现在程序已经用GridView做了,用别的,改动太大

xyunsh(学海无涯,回头是岸) 
   能说清楚一点吗?GridView各列是动态生成的

#5


没有人做过吗

#6


用模版列再简单不过了。

#7


怎么用?
这些类必须动态添加,因为不同的情况要添加不同的列

#8


把你做的各个列都转换成模版列
然后和DataList中的做法是一样的

#9


能具体一点吗
DataList没有用过

#10


可以将datagrid设一个模板列,模板列中插入table,table中再插入label,在datagrid的itemdatabind中设置label的text就行了

#11


是不是想实现以下样式的啊?
-----------------------------------------------
     姓名    |       年龄        |      照片
     性别    |     出生年月      |
-----------------------------------------------
     姓名    |       年龄        |      照
---------------------------------|      
     性别    |       年月        |      片
-----------------------------------------------
     姓名    |       年龄        |      照
---------------------------------|      
     性别    |       年月        |      片
-----------------------------------------------
.....
如果是,那你应该可以用GridView的模板列来做
只要修改.aspx中的模板就可以了,具体的你去找找帮助,有很详细的使用说明,这不赘述

但看你的样子是在后台处理过再输出的
这样的话,你可以尝试构建一个Table对象(System.Web.UI.HtmlControls.HtmlTable)
你构建好一个类似上面的行列,将你需要的值填充好
直接输出,应该能够达到你的要求

#12


模版列可以定义任何行数

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
  <HeaderTemplate>
    <input type="checkbox" onclick="SelAll()" /></HeaderTemplate>
  <ItemTemplate>
    <input type="checkbox" name="guid" value="<%#Eval("ExpertID") %>" />
  </ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="专家名称" DataField="DisplayName" />
<asp:BoundField HeaderText="专家介绍" DataField="Description" />
<asp:TemplateField>
  <ItemTemplate>
    <table width="100%" border="1">
      <tr>
        <td>
          <%#Eval("DisplayName") %>
        </td>
        <td>
          <%#Eval("DisplayName") %>
        </td>
        <td rowspan="2">
          <%#Eval("DisplayName") %>
        </td>
      </tr>
      <tr>
        <td>
          <%#Eval("DisplayName") %>
        </td>
        <td>
          <%#Eval("DisplayName") %>
        </td>
      </tr>
    </table>
  </ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

#13


用模板

#14


用模版列自定义

#15


to mistysunlight(飘渺日光) 

是的,ItemTemplate是要在后台构建的,以为ItemTemplate的内容不是固定的,有好几种类型
你的意思是不用GridView吗

#16


------------------------------------------




我再说一下我的问题吧
现在TemplateField需要在后台生成(因为TemplateField里面的列不是固定的,有多种类型)
怎么在后台绑定TemplateField的列到数据表的字段
我知道BoundField绑定很简单,
直接BoundField field = new BoundField()
field.DataField = "name";
gridView1.Columns.Add(field);就可以了

TemplateField该怎么做?









------------------------------------------

#17


up