【问题标题】:Telerik RadGrid using an array of dataTelerik RadGrid 使用数据数组
【发布时间】:2012-05-01 05:46:54
【问题描述】:

我想使用 RadGrid 根据我拥有的数组动态打印表格。问题是我是 Telerik 和 ASP.NET 的新手。

我会在 PHP 中做的是:

<?php 
$data = stuff;
?>
<table>
   <?php foreach($data as $dataOne): ?>
      <tr><td><?php echo $dataOne; ?></td></tr>
    <?php endforeach; ?>
</table>

现在我想在 ASP.NET 中使用 RadGrid 做同样的事情。

谢谢。

编辑:

数据以带有“对象”的 XML 形式返回,每个对象都有多个字段,包括名称和数字。我希望表格显示所有内容。我可以将 XML 解析为多个数组(每个数组包含一列)、对象或其他任何内容。我需要知道如何将其放入 RadGrid。

【问题讨论】:

    标签: asp.net html telerik


    【解决方案1】:

    ASP.NET 中的等效代码:

    var data = getDataFromDB(); 
    
    telerikGrid.DataSource=data;
    telerikGrid.DataBind();
    

    你将在 aspx 页面上定义你的 gridview:

    <telerik:radgridview id="telerikGrid" runat="server" />
    

    更新:

    我会给你一个使用自定义业务对象的例子,因为你说你可以解析 XML 并创建对象。

    类结构如下:

    public class Employee
    {
        public string EmployeeName {get;set;}
        //... And more properties
        Public Child[] Children {get;set;}
    }
    
    public class Child
    {
       public string Name {get;set;}
       //and more properties
    }
    

    假设您解析 XML 以构造一个 Employee[],您希望以类似于以下方式在网格上显示它:

    -------------------------------
    | Employee Name  |   Children |
    +-----------------------------+
    |  John          |   Peter    |
    |                |   Charles  |
    +----------------+------------+
    | Michael        |   Anna     |
    +-----------------------------+
    

    您的标记应如下所示:

    <telerik:radgridview id="telerikGrid" runat="server" OnItemDataBound="telerikGrid_ItemDataBound">
     <MasterTableView AutoGenerateColumns="false">
          <Columns>
           <telerik:GridBoundColumn DataField="EmployeeName" HeaderText="EmployeeName">
           </telerik:GridBoundColumn>
           <telerik:GridTemplateColumn>
                <ItemTemplate>
                    <telerik:radgridview runat="server" id="gridEmpChildren">
                       <MasterTableView AutoGenerateColumns="false">
                          <Columns>
                              <telerik:GridBoundColumn DataField="Name"                                       HeaderText="Children">
           </telerik:GridBoundColumn>
                          </Columns>
                       </MasterTableView>
                    </telerik:radgridview>
                </ItemTemplate>
           <telerik:GridTemplateColumn>
     </MasterTableView>
    </telerik:radgridview>
    

    您向 ItemDataBound 事件添加一个处理程序并按此方式实现它(注意上面的标记,它定义了此处理程序):

    protected void telerikGrid_ItemDataBound(object sender, GridItemEventArgs e) 
    { 
        if (e.Item is GridDataItem) 
        { 
            GridDataItem item = (GridDataItem)e.Item; 
            RadGridView childrenGrid = (RadGridView)item.FindControl("gridEmpChildren"); 
            childrenGrid.DataSource= item["Children"];//See class Employee
            childrenGrid.DataBind();
        } 
     } 
    

    现在,一个完整的示例实现将呈现我上面示例中显示的网格,如下所示:

     //Sample data
     Employee[] employees = new Employee[] {
        new Employee{
                EmployeeName="John",
                Children= new Child[]{
                        new Child{Name="Peter"},
                        new Child{Name="Charles"}
                        }
            }
            ,new Employee{
                EmployeeName="Michael",
                Children=new Child[]{
                        new Child{Name="Anna"}
                        } 
            }
    };
    
    telerikGrid.DataSource=employees;
    telerik.DataBind(); 
    

    注意:所有代码都没有经过测试,如果它不能立即运行,请原谅我。肯定是接近这个了。

    【讨论】:

    • 如果我想要多列,比如 2 列,并且我希望每一列都有一个数组表示的数据(2 个不同的数组),我该怎么做?
    • 最好贴一下输出的样子以及从数据库返回数据的方式(列名)
    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多