我需要一些帮助, 我正在使用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>
并在代码隐藏中生成列:
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);
}
所以我需要从我的数据库中获取所有值并放入相关的标题... 例如我的数据库我有这样的东西:
Matriz_id Propriedade Valor_id
1 Codigo 1
我需要将“Codigo”放在标题中,将值1放在数据绑定字段中。
1 Sabor 4
如果我的Matriz_id在数据库中有9个值,我的gridview将有9列,如果它有2列,它将有2列,依此类推...... 我尝试作为一个支点或创建一个列表,但我失败了......
答案 0 :(得分:0)
你可以做一些像
这样的事情 gridMatrizes.DataSource = response;
gridMatrizes.DataBind();
在将AutoGenerateColumns设置为true
时,应自动执行列标题编辑:
因此,如果您想拆分列并有时使用它们的标题,其他时候使用数据,我会使用自定义持有者类;
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);
}
如果您无法获取项目中的列,则必须进行字符串拆分,或使用固定宽度或其他内容。
然后
gridMatrizes.DataSource = myList;
gridMatrizes.DataBind();
无论如何,标题将是您声明的属性的名称,因此它不能包含空格。如果你想要空格,你需要手动更改标题,这是凌乱的
对,最后更新; 只有在数据部分开始时,如果列数为偶数,这将起作用。
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>");
然后数据绑定sb.ToString(); 请注意,这只是一个粗略的想法。编码非常粗略,不要尝试复制和粘贴它。