我在C#中有一个2d(nxn)字符串数组,如何将其动态输出到网页(尝试数据表/绑定等)
我有一个需要输出到网页的n×n字符串数组,我发现一些解决方案需要很多(读:很多)行代码(通常将其转换为DataTable,然后绑定到GridView)。而且几乎所有这些解决方案都不适用于我的数组的动态特性(我事先不知道将生成多少列和行,也不知道列的名称:它由用户控制) 我发现所有这些解决方案都有点荒谬,在某些情况下比我已经设计的整个模块更大,只是为了输出我的一小段数据 这是我尝试做的一个例子:我在C#中有一个2d(nxn)字符串数组,如何将其动态输出到网页(尝试数据表/绑定等),c#,asp.net,gridview,datasource,multidimensional-array,C#,Asp.net,Gridview,Datasource,Multidimensional Array,我有一个需要输出到网页的n×n字符串数组,我发现一些解决方案需要很多(读:很多)行代码(通常将其转换为DataTable,然后绑定到GridView)。而且几乎所有这些解决方案都不适用于我的数组的动态特性(我事先不知道将生成多少列和行,也不知道列的名称:它由用户控制) 我发现所有这些解决方案都有点荒谬,在某些情况下比我已经设计的整个模块更大,只是为了输出我的一小段数据 这是我尝试做的一个例子: object1 = (string[,]) r.GetSymbol("stringArray"
object1 = (string[,]) r.GetSymbol("stringArray"); //I retrieve n x n array and cast as a string contained in an object (have to do this because I am using COM interfaces).
Output_GridView.DataSource = object1; //(If I try to convert this to a string, it returns the dataType "string" not the 2d array
Output_GridView.DataBind();
这不起作用(根据我得到的错误,它需要一个1d数组,我不知道为什么DataSource/GridView会受到这样的限制),我读过一些非常难看的解决方案,但实际上,我只需要编写一个嵌套的for循环,将n列和n行输出到ASP.NET页面。有人能帮帮我吗(为什么这么琐碎的任务如此困难?)
感谢您的反馈=)
-Dave虽然很难看,但是.aspx中的ASP代码块可以工作:
<table>
<% for(int i = 0; i < ArrayDimensionLength; i++) { %>
<tr>
<td>RowHeader</td>
<% for(int j = 0; j < ArrayDimensionLength; j++) { %>
<td><%= Array[i,j] %> </td>
<% } %>
</tr>
<% } %>
</table>
尽管很难看,.aspx中的ASP代码块仍然可以工作:
<table>
<% for(int i = 0; i < ArrayDimensionLength; i++) { %>
<tr>
<td>RowHeader</td>
<% for(int j = 0; j < ArrayDimensionLength; j++) { %>
<td><%= Array[i,j] %> </td>
<% } %>
</tr>
<% } %>
</table>
不漂亮,但应该给你一个开始
//setup the data
var random = new Random();
int x = random.Next(14) + 1;
int y = random.Next(29) + 1;
var data = new int[x, y];
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
data[i, j] = random.Next(100);
//create the data table
var table = new Table();
for (int i = 0; i < x; i++)
{
var newRow = new TableRow();
for (int j = 0; j < y; j++)
{
var newCell = new TableCell();
newCell.Text = data[i,j].ToString();
newRow.Cells.Add(newCell);
}
table.Rows.Add(newRow);
}
ux_Panel.Controls.Add(table);
//设置数据
var random=新的random();
int x=随机。下一个(14)+1;
int y=随机。下一个(29)+1;
var数据=新整数[x,y];
对于(int i=0;i
Shlomo看起来是更好的解决方案,除非你想对数据进行更多的处理,这不太好,但应该给你一个开始
//setup the data
var random = new Random();
int x = random.Next(14) + 1;
int y = random.Next(29) + 1;
var data = new int[x, y];
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
data[i, j] = random.Next(100);
//create the data table
var table = new Table();
for (int i = 0; i < x; i++)
{
var newRow = new TableRow();
for (int j = 0; j < y; j++)
{
var newCell = new TableCell();
newCell.Text = data[i,j].ToString();
newRow.Cells.Add(newCell);
}
table.Rows.Add(newRow);
}
ux_Panel.Controls.Add(table);
//设置数据
var random=新的random();
int x=随机。下一个(14)+1;
int y=随机。下一个(29)+1;
var数据=新整数[x,y];
对于(int i=0;i
Shlomo看起来是更好的解决方案,除非您想对数据进行更多的处理您是否考虑过创建一个自定义web控件。我创建了一个快速的函数,它接受数组[,],只需在一个div中输出数组的内容,每个数组值周围都有p。它简单、轻量级,您可以完全控制输出 以下是您需要实施的步骤: 向web应用程序添加新项目,并确保引用System.web。也许可以打电话给项目网络控制 将以下C#代码添加到可以添加到项目的新类文件中 自定义控制代码:
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebControls
{
[ToolboxData("<{0}:ArrayDisplayControl runat=server></{0}:ArrayDisplayControl>")]
public class ArrayDisplayControl : WebControl
{
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Div;
}
}
public string[,] DataSource
{
get
{
return (string[,])ViewState["DataSource"];
}
set
{
ViewState["DataSource"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.WriteBeginTag("div");
for (int i = 0; i < DataSource.GetLength(0); i++)
{
for (int j = 0; j < DataSource.GetLength(1); j++)
{
output.WriteFullBeginTag("p");
output.Write(DataSource[i, j]);
output.WriteEndTag("p");
}
}
output.WriteEndTag("div");
}
}
}
以下是运行后的输出:
<div id="ctlArrayDisplay">
<div><p>Mike</p><p>Amy</p><p>Mary</p><p>Albert</p></div>
</div>
迈克艾米玛丽阿尔伯特
希望这能帮你摆脱困境
享受吧 您是否考虑过只创建一个自定义web控件。我创建了一个快速的函数,它接受数组[,],只需在一个div中输出数组的内容,每个数组值周围都有p。它简单、轻量级,您可以完全控制输出 以下是您需要实施的步骤: 向web应用程序添加新项目,并确保引用System.web。也许可以打电话给项目网络控制 将以下C#代码添加到可以添加到项目的新类文件中 自定义控制代码:
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebControls
{
[ToolboxData("<{0}:ArrayDisplayControl runat=server></{0}:ArrayDisplayControl>")]
public class ArrayDisplayControl : WebControl
{
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Div;
}
}
public string[,] DataSource
{
get
{
return (string[,])ViewState["DataSource"];
}
set
{
ViewState["DataSource"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.WriteBeginTag("div");
for (int i = 0; i < DataSource.GetLength(0); i++)
{
for (int j = 0; j < DataSource.GetLength(1); j++)
{
output.WriteFullBeginTag("p");
output.Write(DataSource[i, j]);
output.WriteEndTag("p");
}
}
output.WriteEndTag("div");
}
}
}
以下是运行后的输出:
<div id="ctlArrayDisplay">
<div><p>Mike</p><p>Amy</p><p>Mary</p><p>Albert</p></div>
</div>
迈克艾米玛丽阿尔伯特
希望这能帮你摆脱困境
享受吧 删除甚至如此愤世嫉俗的评论。你能告诉我更多关于你的数据的性质和你想如何显示它吗?它是带有列和行标题的数字数据(虽然从技术上讲整个事情都是字符串)。它需要以表格格式显示,如果我能将2d数组叠加到首页上,那就太棒了,它已经正确地格式化了。删除了甚至如此愤世嫉俗的评论。你能告诉我更多关于你的数据的性质和你想如何显示它吗?它是带有列和行标题的数字数据(虽然从技术上讲整个事情都是字符串)。它需要以表格格式显示,如果我能将2d数组叠加到首页上,那就太棒了,它已经正确格式化了。