Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态生成GridView-透视或返回匿名类型_C#_Asp.net_Gridview_Pivot Table_Anonymous Types - Fatal编程技术网

C# 动态生成GridView-透视或返回匿名类型

C# 动态生成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

我需要一些帮助, 我使用的是gridview

<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>");