我在C#中有一个2d(nxn)字符串数组,如何将其动态输出到网页(尝试数据表/绑定等)

我在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"

我有一个需要输出到网页的n×n字符串数组,我发现一些解决方案需要很多(读:很多)行代码(通常将其转换为DataTable,然后绑定到GridView)。而且几乎所有这些解决方案都不适用于我的数组的动态特性(我事先不知道将生成多少列和行,也不知道列的名称:它由用户控制)

我发现所有这些解决方案都有点荒谬,在某些情况下比我已经设计的整个模块更大,只是为了输出我的一小段数据

这是我尝试做的一个例子:

    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数组叠加到首页上,那就太棒了,它已经正确格式化了。