Я пытаюсь заполнить DataGridView
с динамически генерируемыми DataTable
и мне нужно один из колонны, чтобы быть редактируемый TextBox
Programatically добавить редактируемый TextBox в DataTable - Колонка требует действительного DATATYPE
Это отрывок из моих приложение, которое заполнит вид сетки данных:
public static void PopulatePOLines(MSSQLConnection mssqlConnection, string supplierAccountNumber, DataGridView poLineList)
{
// Init
DataTable dataTable = new DataTable();
DataColumn dataColumn;
DataRow dataRow;
List<POLine> poLines = new List<POLine>();
// Define sage sku column
dataColumn = new DataColumn();
dataColumn.DataType = Type.GetType("System.String");
dataColumn.ColumnName = "sageSku";
dataTable.Columns.Add(dataColumn);
// Define required quantity column
dataColumn = new DataColumn();
dataColumn.DataType = Type.GetType("System.Int32");
dataColumn.ColumnName = "requiredQuantity";
dataTable.Columns.Add(dataColumn);
// Define on pop quantity column
dataColumn = new DataColumn();
dataColumn.DataType = Type.GetType("System.Int32");
dataColumn.ColumnName = "onPOPQuantity";
dataTable.Columns.Add(dataColumn);
// Define order quantity column
dataColumn = new DataColumn();
dataColumn.DataType = Type.GetType("System.Windows.Forms.TextBox");
dataColumn.ColumnName = "orderQuantity";
dataTable.Columns.Add(dataColumn);
// Consolidate & populate po lines from failed allocations by supplier from db
try
{
// Query database
List<Dictionary<string, object>> results = mssqlConnection.ExecuteReader(
"... snipped...",
new Dictionary<string, object>()
{
{ "SupplierAccountNumber", supplierAccountNumber }
});
// Parse result
foreach (Dictionary<string, object> dbRow in results)
{
// Parse row field value
var sageSku = dbRow["SageSku"].ToString();
var quantity = Convert.ToInt32(dbRow["Quantity"]);
// Check if this failed allocation line is known
var poLine = poLines.Find(s => s.SageSku == sageSku);
// If this line isn't known
if (null == poLine)
{
// Workout quantity on pop for this sage sku
var onPOPQty = mssqlConnection.ExecuteScalar<int>(
"... snipped...",
new Dictionary<string, object>()
{
{ "SageSku", sageSku }
});
// Insert a new record
poLines.Add(new POLine()
{
SageSku = sageSku,
RequiredQty = quantity,
OnPOPQty = onPOPQty
});
}
else
{
// Update existing record
poLine.RequiredQty += quantity;
}
// Clean-up
sageSku = null;
}
// Clean-up
results = null;
// Iterate through po lines
foreach (POLine poLine in poLines)
{
dataRow = dataTable.NewRow();
dataRow["sageSku"] = poLine.SageSku;
dataRow["requiredQuantity"] = poLine.RequiredQty;
dataRow["onPOPQuantity"] = poLine.OnPOPQty;
dataRow["orderQuantity"] = (poLine.OnPOPQty > poLine.RequiredQty ? 0 : (poLine.RequiredQty - poLine.OnPOPQty));
dataTable.Rows.Add(dataRow);
}
}
catch (Exception ex)
{
ShowError("Failed to consolidate & populate purchase order lines by selected supplier.", ex);
}
// Set data source
poLineList.DataSource = new DataView(dataTable);
// Clean-up
dataTable = null;
dataColumn = null;
dataRow = null;
poLines = null;
// Update column header text
poLineList.Columns[0].HeaderText = "Sage Sku";
poLineList.Columns[1].HeaderText = "Required Qty";
poLineList.Columns[2].HeaderText = "On POP Qty";
poLineList.Columns[3].HeaderText = "Suggested Order Qty";
}
При выполнении этого кода, я получаю следующее сообщение об ошибке:
Column requires a valid DataType.
Что я здесь делаю неправильно?
Если я установил orderQuantity
колонки DataType
к System.Int32
, то DataGrid зрения правильно делает с моими данными, но это не редактируется:
Любые идеи, как я могу решить эту проблему?
Свойство DataType DataColumn не поддерживает тип данных System.Windows.Forms.TextBox. Я немного озадачен сообщением об ошибке, но это окончательно не является хорошим значением. – Steve
Есть ли альтернативный способ создания редактируемого поля, если 'System.Windows.Forms.TextBox' не поддерживается? – Latheesan
_DataGridView.Columns [x] .ReadOnly = false; _ – Steve