简体   繁体   English

如何在不使用设计器的情况下将列添加到Infragistics UltraGrid

[英]How to add columns to Infragistics UltraGrid without using designer

I struggled with the Infragistics UltraGrid designer in Visual Studio 2015 because it keeps throwing errors when I tried to add and define columns without binding the data. 我在Visual Studio 2015中遇到了Infragistics UltraGrid设计器,因为当我尝试添加和定义列而不绑定数据时,它一直在抛出错误。 I even explicitly chose to not bind data to it, but it throws the error anyway. 我甚至明确地选择不绑定数据,但无论如何它都会抛出错误。 After a while, I gave up and now I'm trying to manually add columns in C# without relying on the designer. 过了一会儿,我放弃了,现在我正在尝试手动添加C#中的列而不依赖于设计器。

I tried to find ways to add columns in UltraGrid without relying on the designer, and I have found no useful data. 我试图找到在UltraGrid中添加列的方法而不依赖于设计器,我找不到有用的数据。 I have tried looking in Infragistics 2015 v2 Documentation for "UltraGrid" and "UltraGrid Column" and they didn't have anything pertaining creating the columns without relying on the UltraGrid designer. 我曾尝试在“UltraGrid”和“UltraGrid列”中查看Infragistics 2015 v2文档 ,但他们没有任何关于创建列的内容,而不依赖于UltraGrid设计器。

Does anyone know how I can add new columns to UltraGrid without relying on the UltraGrid designer? 有没有人知道如何在不依赖UltraGrid设计器的情况下向UltraGrid添加新列?

I think I have figured out the answer to this question on my own, and I figured it would benefit some people if I posted what I discovered here. 我想我自己已经找到了这个问题的答案,我认为如果我发布了我在这里发现的东西,它会使一些人受益。

1. First... Make headers by adding and defining columns 1.首先......通过添加和定义列来创建标题

2. Next, add data 2.接下来,添加数据

3. Finally, bind data. 3.最后,绑定数据。

//Be sure to include this heading:
using Infragistics.Win.UltraWinGrid;

public class ClassName{

    // 1. Make the Headers by adding and defining columns.
    private static DataTable MakeTableHeaders()
    {
        DataTable myDataTable = new DataTable("My Table");
        // Declare variables for DataColumn and DataRow objects.
        DataColumn column;

        // Properties:
        // column.DataType   =  set data type (System.Int32, System.String, etc...)
        // column.ColumnName =  set column key (it MUST be unique) (String)
        // column.Caption    =  set the string to be visible for column header. (String)
        // column.ReadOnly   =  set whether the column is editable or not. (Boolean)
        // column.Unique     =  set whether or not values in the column must be unique.
        //                      Unique values = each cell must be different each other.
        //                      (Boolean)


        //// Program ID
        //// Caption "ID"
        column = new DataColumn();
        column.DataType = System.Type.GetType("System.Int32");
        column.ColumnName = "ID";
        column.Caption = "ID";
        column.ReadOnly = true;
        column.Unique = true;
        // Adds the column to the programTable.
        myDataTable.Columns.Add(column);

        //// Program Name
        //// Caption "Program"
        column = new DataColumn();
        column.DataType = System.Type.GetType("System.String");
        column.ColumnName = "Program";
        column.Caption = "Program";
        column.ReadOnly = true;
        column.Unique = false;
        // Adds the column to the programTable.
        myDataTable.Columns.Add(column);

        // Add the rest of the necessary columns.
        // ....

        // When completed, return the table.
        return myDataTable;
    }

    // 2. Next, add data.
    public static DataSet loadData()
    {
        DataTable myDataTable = MakeTableHeaders();

        // Add a new empty data row to our data model.
        DataRow theDataRow = myDataTable.NewRow();

        // Add data
        theDataRow[0] = 0;
        theDataRow[1] = "Program Name";

        // Add the DataRow to the table.
        myDataTable.Rows.Add(theDataRow);

        // Don't forget to accept changes,
        // or the data may not be retained.
        myDataTable.AcceptChanges();

        // Create a new DataSet.
        gridDataSet = new DataSet();

        // Add the table to DataSet.
        gridDataSet.Tables.Add(myDataTable);

        // Return the DataSet.
        return gridDataSet;
    }

    // 3. Finally, bind data.
    // Do it in the construct of your class
    public ClassName()
    {
        // Use the UltraGrid name you assigned to
        // your UltraGrid.
        ugMyUltraGrid.DataSource = loadData();
    }

    ugMyUltraGrid_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.CellEventArgs)
    {
        // This is used to place columns in specific place.
        int headerPosition = 0;

        // Set cell editability
        // Activation.ActivateOnly = The context in the cell can be selected, but cannot be edited.
        // Activation.AllowEdit = Allows the cell to be edited.
        // Activation.Disabled = Disables the cell.
        // Activation.NoEdit = Only allows the cell to be activated.
        col.CellActivation = Activation.ActivateOnly;

        // Hide all columns
        col.Hidden = true;

        // Program ID
        column = "ID";
        ugColumn = e.Layout.Bands[parent].Columns[column];
        e.Layout.Bands[parent].Columns[column].Header.Caption = "ID";
        e.Layout.Bands[parent].Columns[column].Header.VisiblePosition = headerPosition++;
        e.Layout.Bands[parent].Columns[column].Width = 50;
        // To size it to a fixed column width, use this instead:
        // e.Layout.Bands[parent].Columns[column].MinWidth = e.Layout.Bands[parent].Columns[column].MaxWidth = 50;

        // Program Name
        column = "Program";
        e.Layout.Bands[parent].Columns[column].Header.Caption = "Project";
        e.Layout.Bands[parent].Columns[column].Header.VisiblePosition = headerPosition++;
        e.Layout.Bands[parent].Columns[column].Width = 150;
        // To size it to a fixed column width, use this instead:
        // e.Layout.Bands[parent].Columns[column].MinWidth = e.Layout.Bands[parent].Columns[column].MaxWidth = 150;
    }
}

There you have it. 你有它。 :-) :-)

Let me know if you run into issues, then I will do my best to help you. 如果您遇到问题,请告诉我,然后我会尽力帮助您。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM