2013-03-27 5 views
4

В настоящее время я работаю над пользовательским холстом, и я должен добавить таблицу, поэтому я думал, что dataGrid будет в порядке. SO i Хочу создать таблицу «» « от « Datagrid », по которому пользователь может добавить таблицу на холст во время выполнения.Динамически добавлять столбцы в DataGrid в wpf

До сих пор я попытался заполнить DataGrid списком и преуспел.

Как добавить столбцы в Datagrid во время выполнения, чтобы количество столбцов и значение заголовка было взято у пользователя во время выполнения с использованием текстового поля и на основе значения текстового поля, который должен содержать столбцы и заголовок стоимость.

На самом деле я хочу разработать таблицу, в которой пользователь передает столбцы без столбца и заголовок столбца, и таблица должна быть сгенерирована.

Или

«Можете ли вы предложить мне путь, где я должен смотреть, чтобы„нарисовать“таблицу, используя класс DrawingVisual»

Это является частью GraphicsTable класса

//Custom Classes "DrawingCanvas & GraphicsTable" 
public void CreateDataGrid(GraphicsTable graphicsTable, DrawingCanvas drawingCanvas) 
{ 
    dt = new DataGrid(); 
    dt.Name = "Data"; 
    dt.ItemsSource = person(); 
    dt.AllowDrop = true; 
    dt.AutoGenerateColumns = true; 
    dt.Height = graphicsTable.Rectangle.Height; 
    dt.Width = graphicsTable.Rectangle.Width; 
    drawingCanvas.Children.Add(dt); 
    Canvas.SetTop(dt, graphicsTable.Rectangle.Top); 
    Canvas.SetLeft(dt, graphicsTable.Rectangle.Left); 
    dt.Width = dt.Width; 
    dt.Height = dt.Height; 
    dt.Focus(); 
} 
//I have just tried to add dome dummy data to the datagrid. 

public List<Person> person() 
{ 
    List<Person> peep = new List<Person>(); 
    peep.Add(new Person() {}); 
    return peep; 
} 

public class Person 
{ 
    private string name; 
    private double salary; 
    public string Names 
    { 
     get { return name; } 
     set { name = value; } 
    } 
    public double Salary 
    { 
     get { return salary; } 
     set { salary = value; } 
    } 
} 
+0

Вы повесили трубку с помощью DrawingVisual, чтобы разжечь сетку или вы с удовольствием продолжаете использовать DataGrid, если бы вы могли динамически добавлять столбцы? – Dutts

+0

@Richard Спасибо за ур ответ. DrawingVisual было бы потрясающе !!!, но если это невозможно с DrawingVisual, то мне придется поселиться с datagrid. – Abhinav

ответ

5

Вы можете динамически строить столбцы DataGrid следующим образом.

public void buildTable(string[] headers) 
{ 
    myGrid.Columns.Clear(); 
    foreach (string header in headers) 
    { 
     DataGridTextColumn c = new DataGridTextColumn(); 
     c.Header = header; 
     myGrid.Columns.Add(c); 
    } 
} 

Если вы устанавливаете ItemsSource, однако, число строк и столбцов будет автоматически подстраиваться соответствовать значению ItemsSource. Например, следующий код создает DataGrid с тремя строками и тремя столбцами.

dt = new DataTable(); 

for (int i = 0; i < 3; i++) 
    dt.Columns.Add("col" + i.ToString()); 

for (int i = 0; i < 3; i++) 
{ 
    DataRow r = items.NewRow(); 
    r[0] = "a" + i.ToString(); 
    r[1] = "b" + i.ToString(); 
    r[2] = "c" + i.ToString(); 
    dt.Rows.Add(r); 
} 

myGrid.ItemsSource = dt; 
 
+------+------+------+ 
| col0 | col1 | col2 | 
+------+------+------+ 
| a0 | b0 | c0 | 
+------+------+------+ 
| a1 | b1 | c1 | 
+------+------+------+ 
| a2 | b2 | c2 | 
+------+------+------+ 

Не зная ваши точные требования, я бы не возиться с вручную рисовать таблицу в коде, если у вас есть какие-то особые потребности пользовательской графики и даже в этом случае я хотел бы посмотреть в использовании XAML для Преобрази DataGrid или его элементы, прежде чем пытаться сделать это самостоятельно. Это мое мнение. Удачи!

EDIT:

Если вы хотите создать столбцы таблицы на основе пользовательского ввода, вам просто нужно будет поместить код генерации столбцов в обработчик событий. В вашем примере вы можете добавить обработчик события для Textbox TextChanged следующим образом. Этот обработчик событий запускается каждый раз, когда текст изменяется в текстовом поле. Возможно, вы захотите добавить валидацию, чтобы пользователи не могли вводить большие числа.

private void numColsTextbox_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    int numCols; 
    if (Int32.TryParse(tb.Text, out numCols)) 
    { 
     myGrid.Columns.Clear(); 
     for (int i = 1; i <= numCols; i++) 
     { 
      DataGridTextColumn c = new DataGridTextColumn(); 
      c.Header = "Column " + i.ToString(); 
      myGrid.Columns.Add(c); 
     } 
    } 
} 
+0

Спасибо за предложение ur, И я думаю, что я не могу объяснить свое требование, я сожалею об этом !! То, что вы мне объяснили, прекрасно работает, но это не то, что я хочу. Как я могу нарисовать таблицу на основе пользовательского ввода, например: Если пользователю нужны 3 столбца, то он будет вводить 3 в текстовое поле (что-то, из которого он вводит ввод), и должна быть создана таблица, содержащая 3 столбца. Я ценю вашу помощь !!!!!! еще раз спасибо!! – Abhinav

+0

Я обновил свой ответ, чтобы включить информацию о том, как создавать столбцы на основе ввода пользователем. –

Смежные вопросы