Telerik RadGrid为每个对象添加数据列而不是行

本文关键字:数据 添加 RadGrid 对象 Telerik | 更新日期: 2023-09-27 18:26:16

我有一个对象数据源要绑定到我的RadGrid。但我不希望它向下生长,而是希望它向右扩展
例如,一个通用网格的顶部有Headers,下面有数据:

Column A   Column B   Column C   
Value A    1          9          
Value B    3          7 
Value C    15         17        

相反,我希望列标题位于左侧,值位于右侧。

Column A   Value A   Value B   Value C
Column B    1          9          15
Column C    3          7          17

如何实现?

Telerik RadGrid为每个对象添加数据列而不是行

.aspx

    <telerik:RadGrid ID="RadGrid1" Width="95%" runat="server" OnItemCreated="RadGrid1_ItemCreated"
        OnNeedDataSource="RadGrid1_NeedDataSource1">
        <PagerStyle Mode="NextPrevAndNumeric" />
    </telerik:RadGrid>

.aspx.cs

public DataTable GetDataTable(string query)
    {
        String ConnString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
        SqlConnection conn = new SqlConnection(ConnString);
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(query, conn);
        DataTable myDataTable = new DataTable();
        conn.Open();
        try
        {
            adapter.Fill(myDataTable);
        }
        finally
        {
            conn.Close();
        }
        return myDataTable;
    }

    public DataTable PivotTable(DataTable source)
    {
        DataTable dest = new DataTable("Pivoted" + source.TableName);
        dest.Columns.Add(" ");
        foreach (DataRow r in source.Rows)
            dest.Columns.Add(r[0].ToString());
        for (int i = 0; i < source.Columns.Count - 1; i++)
        {
            dest.Rows.Add(dest.NewRow());
        }
        for (int r = 0; r < dest.Rows.Count; r++)
        {
            for (int c = 0; c < dest.Columns.Count; c++)
            {
                if (c == 0)
                    dest.Rows[r][0] = source.Columns[r + 1].ColumnName;
                else
                    dest.Rows[r][c] = source.Rows[c - 1][r + 1];
            }
        }
        dest.AcceptChanges();
        return dest;
    }
    protected void RadGrid1_NeedDataSource1(object source, GridNeedDataSourceEventArgs e)
    {
        RadGrid1.DataSource = PivotTable(GetDataTable("SELECT TOP 5 CustomerID, CompanyName, ContactName, ContactTitle, Address, PostalCode, City, Country FROM Customers"));
    }
    protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e)
    {
        if (e.Item is GridDataItem)
        {
            (e.Item as GridDataItem)[(RadGrid1.MasterTableView.AutoGeneratedColumns[0] as GridBoundColumn).UniqueName].Font.Bold = true;
            (e.Item as GridDataItem)[(RadGrid1.MasterTableView.AutoGeneratedColumns[0] as GridBoundColumn).UniqueName].BackColor = System.Drawing.SystemColors.Control;
            (e.Item as GridDataItem)[(RadGrid1.MasterTableView.AutoGeneratedColumns[0] as GridBoundColumn).UniqueName].BorderColor = System.Drawing.Color.White;
        }
    }