C# 动态生成GridView-透视或返回匿名类型
我需要一些帮助, 我使用的是gridviewC# 动态生成GridView-透视或返回匿名类型,c#,asp.net,gridview,pivot-table,anonymous-types,C#,Asp.net,Gridview,Pivot Table,Anonymous Types,我需要一些帮助, 我使用的是gridview <asp:GridView ID="gridMatrizes" runat="server" AutoGenerateColumns="true" AllowPaging="true" OnRowDataBound="gridMatrizes_RowDataBound" OnRowCommand="gridMatrizes_RowCommand" OnPageIndexChanging="gridMatrizes_PageIndexCh
<asp:GridView ID="gridMatrizes" runat="server" AutoGenerateColumns="true" AllowPaging="true"
OnRowDataBound="gridMatrizes_RowDataBound" OnRowCommand="gridMatrizes_RowCommand" OnPageIndexChanging="gridMatrizes_PageIndexChanging"
PageSize="20" class="table table-bordered table-striped table-hover ">
<Columns>
</Columns>
<PagerSettings Mode="Numeric" PageButtonCount="20" Position="Bottom" />
<PagerStyle CssClass="center" VerticalAlign="Bottom" HorizontalAlign="Center" />
</asp:GridView>
以及在codebehind中生成列:
qsBll qsBll = new qsBll();
BaseRequest<Model.Propriedades> request_propriedades = new BaseRequest<Model.Propriedades> { };
var response = qsBll.Select_Propriedade(request_propriedades).Items;
foreach (var item in response)
{
BoundField bfield = new BoundField();
bfield.HeaderText = item.Propriedade;
bfield.DataField = item.Propriedade;
gridMatrizes.Columns.Add(bfield);
}
qsBll qsBll=new qsBll();
BaseRequest_propriedades=新的BaseRequest{};
var response=qsBll。选择_Propriedade(请求_propriedades)。项目;
foreach(响应中的var项目)
{
BoundField bfield=新的BoundField();
bfield.HeaderText=项目专有数据;
bfield.DataField=项目.Propriedade;
gridMatrizes.Columns.Add(bfield);
}
所以我需要从我的数据库中获取所有的值并放入相关的头中。。。
例如,我的数据库中有如下内容:
Matriz_id Propriedade Valor_id
1 Codigo 1
1 Sabor 4
我需要将“Codigo”放在标题中,将值1放在数据绑定字段中
若我的Matriz_id在数据库中有9个值,我的gridview将有9列,若它有2列,它将有2列,依此类推。。。
我尝试作为一个轴心点或创建一个列表,但我失败了…你可以这样做
gridMatrizes.DataSource = response;
gridMatrizes.DataBind();
当您将AutoGenerateColumns设置为true时,这将自动生成列标题
编辑:
所以,如果您想拆分列,有时使用它们的标题,有时使用数据,我会使用一个定制的holder类
public class RepsonseHolder()
{
public string Valor {get;set;}
public string Codigo {get;set;}
}
var myList = new List<RepsonseHolder>();
foreach (var item in response)
{
var newHolder = new RepsonseHolder();
newHolder.Valor = item.Column(5); // Or however you can get at your Ids
newHolder.Cordigo = item.Column(7);
myList.Add(newHolder);
}
无论如何,标题将是您声明的属性的名称,因此其中不能有空格。如果需要空格,则需要手动更改标题,这很混乱
对,最后更新,;
只有当数据段开始时,列数为偶数时,这才有效
var sb = new StringBuilder();
sb.Append("<table>");
int columnCounter;
sb.Append("<tr>");
var firstRow = response[0]; // Use the first row to get the headers
for(int i = 2; i < firstRow.Columns; i = i + 2) //Start at your first HeaderDataPair
{
sb.Append("<td>" + firstRow.Column[i] + "</td>");
columnCounter++;
}
sb.Append("</tr>");
foreach (var item in response)
{
sb.Append("<tr>");
for(int i = 3; i < columnCounter; i = i + 2) //Start one after the first Pair
{
sb.Append("<td>" +item.Column[i] + "</td>");
}
sb.Append("</tr>");
}
sb.Append("</table>");
var sb=new StringBuilder();
某人加上(“”);
int列计数器;
某人加上(“”);
var firstRow=响应[0];//使用第一行获取标题
对于(int i=2;i
然后数据绑定sb.ToString();
注意,这只是一个粗略的想法。编码非常粗略,不要试图复制和粘贴它。我需要将列“Propriedade”绑定为gridview的列标题,将Valor_id绑定为该列的值……我们越来越近了,但我的问题之一是我不知道我的网格将有多少列,例如:Matriz_id Propriedade Valor 1 Código 10 Tipo 1 Classe 3 Cor 4 Teor 4 Estilo 3 Bebida de Origem 3 Sabor 5 teste 1 2 Código 1 2 Cor 4我需要在我的网格中显示所有具有“Valor”相关值的“propriedades”,例如:Código Tipo Classe Cor Teor 10 1 3 4,因此我无法创建一个包含所有值的类“老板“价值观因为它们是可变的,所以你需要和发送数据给你的人谈谈……这是一件糟糕的事情,我会再更新一次我的答案。好了,我走了,我相信有一种更优雅的方式来做这件事,但我今晚得走了。谢谢你,伙计,我正在尝试这样做,如果我成功了,我会通知你。
var sb = new StringBuilder();
sb.Append("<table>");
int columnCounter;
sb.Append("<tr>");
var firstRow = response[0]; // Use the first row to get the headers
for(int i = 2; i < firstRow.Columns; i = i + 2) //Start at your first HeaderDataPair
{
sb.Append("<td>" + firstRow.Column[i] + "</td>");
columnCounter++;
}
sb.Append("</tr>");
foreach (var item in response)
{
sb.Append("<tr>");
for(int i = 3; i < columnCounter; i = i + 2) //Start one after the first Pair
{
sb.Append("<td>" +item.Column[i] + "</td>");
}
sb.Append("</tr>");
}
sb.Append("</table>");