valor una manualmente datos columna celda agregar c# wpf datagrid

manualmente - agregar datos a una columna datagridview c#



Agregar datos solo a una Columna específica (1)

Estoy tratando de encontrar una forma de agregar datos de una cuadrícula de datos a otra y de que esos datos se inserten en una sola columna a la vez en mi segunda cuadrícula de datos. La columna específica se crea cada vez que se hace clic en el botón Add .

Mi codificación hasta ahora:

private void btnFeedbackAddSupplier_Click(object sender, RoutedEventArgs e) { dgFeedbackSelectSupplier.Items.Clear(); //So that my rows do not stack each other on every add DataGridTextColumn columnSupplier = new DataGridTextColumn(); columnSupplier.Binding = new Binding("Supplier"); DataGridTextColumn columnFeedbackSupplierItem = new DataGridTextColumn(); //The ''Item'' column is binded in XAML columnSupplier.Header = (cmbFeedbackSelectSupplier.SelectedItem as DisplayItems).Name; columnSupplier.IsReadOnly = true; dgFeedbackAddCost.SelectAll(); //Selects all the rows in 1st datagrid //Casts selected rows to my ''ViewQuoteItemList'' class IList list = dgFeedbackAddCost.SelectedItems as IList; IEnumerable<ViewQuoteItemList> items = list.Cast<ViewQuoteItemList>(); var collection = (from i in items let a = new ViewQuoteItemList { Item = i.Item, Supplier = i.Cost } select a).ToList(); //Adds both the column and data to the 2nd datagrid dgFeedbackSelectSupplier.Columns.Add(columnSupplier); foreach (var item in collection) dgFeedbackSelectSupplier.Items.Add(item); }

La razón por la que deseo agregar los datos a una sola columna a la vez es porque los datos son diferentes cada vez que deseo agregarlos a mi segunda cuadrícula de datos y sobrescribe cualquier información anterior que se ingresó en los agregados anteriores.

EDITAR : I Aquí hay algunas imágenes de lo que es mi problema actual

Aquí agrego la primera compañía y sus valores. Todo funciona bien

Aquí agrego la segunda compañía con sus nuevos valores, pero cambia los valores ingresados ​​con la primera compañía . Este es mi gran problema Para que pueda ver cómo se cambian mis valores de la primera a la segunda imagen


Creo que su problema aquí es que todas sus columnas están ligadas a la misma propiedad: Supplier . Como está actualizando esa propiedad cada vez, a todas las columnas se les asigna el mismo valor. Al final, solo hay una propiedad de proveedor para cada fila, por lo que no puede mostrar un valor diferente para esa propiedad individual en cada columna ya que cada vez que cambia el valor de esa propiedad, los enlaces se notifican y se actualizan.

Tal vez podrías intentar usar un Encuadernación de OneTime lugar de uno normal. De esta forma, las celdas retendrían el valor que tenían cuando las agregó por primera vez a DataGrid. Pero para que eso funcione, debe evitar borrar la lista de elementos de DataGrid, ya que volver a agregar los elementos los obligaría a volver a enlazar de nuevo.

Otra opción sería tener una lista de proveedores en su propiedad de Proveedor, y hacer que cada columna se una a un índice de esa lista.

private void btnFeedbackAddSupplier_Click(object sender, RoutedEventArgs e) { // ... columnSupplier.Binding = new Binding(string.Format("Supplier[{0}]", supplierColumnIndex)); // ... var supplierCosts = new List<int>(); // ... // Fill the list with the Costs of the Suppliers that correspond to each column and item // ... var collection = (from i in items let a = new ViewQuoteItemList { Item = i.Item, Supplier = supplierCosts } select a).ToList(); //Adds both the column and data to the 2nd datagrid dgFeedbackSelectSupplier.Columns.Add(columnSupplier); foreach (var item in collection) dgFeedbackSelectSupplier.Items.Add(item); }