我已经完成了一个从 VFP 数据库中选择一些数据并将所有内容插入 DataGrid 的工具。(直到这里一切正常......)此时我想更改特定列的一些值,但每次我都会收到错误,说类型不正确,因为需要“十进制”并且我正在插入一些字符串。 ..
我会用一个例子来解释。有一列包含行 ID,然后我有另一列包含所有用户 ID,依此类推。我需要的是用用户名更改用户 ID。(仅在我的 DataGrid 中,不在数据库中)这意味着,例如包含用户 ID“1234”的单元格更改为“John”。我的问题:在运行时包含“1234”的列被声明为“十进制”,所以我不能输入任何字符串。
我尝试使用所有这三个命令(一个一个,而不是一起使用):
1) dataGrid.Columns["hot_kunde"].CellTemplate.ValueType = typeof(string);
2) dataGrid.Columns["hot_kunde"].ValueType = typeof(string);
3) for (int i = 0; i < dataGrid.RowCount; i++)
{
dataGrid.Rows[i].Cells[1].ValueType = typeof(String);
dataGrid.Rows[i].Cells[1].Value = "test";
}
当我使用 MessageBox 显示新更改的类型时,它会抛出“System.String”。无论如何,当尝试使用字符串更改值时,它会引发异常(如“预期小数”之前所述)。(例如“测试”)
我错过了什么吗?
谢谢你的任何回复
编辑:
好的,这是我的实际代码:
public void SqlQuery(String SQL)
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=VFPOLEDB;" +
"Data Source=" + Properties.Settings.Default.DBCcontainer + "\\drive.dbc;" +
"Collating Sequence=machine;" +
"Password=;" +
"Mode=Share Deny Write;";
conn.Open();
OleDbCommand cmd = new OleDbCommand(SQL, conn);
try
{
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable DTable = new DataTable();
da.Fill(DTable);
dataGrid.DataSource = DTable;
conn.Dispose();
conn.Close();
dataGrid.Columns["hot_kunde"].CellTemplate.ValueType = typeof(string);
//dataGrid.Columns["hot_kunde"].ValueType = typeof(string);
for (int i = 0; i < dataGrid.RowCount; i++)
{
//MessageBox.Show(dataGrid.Rows[i].Cells["hot_kunde"].ValueType.ToString());
//dataGrid.Rows[i].Cells[1].ValueType = typeof(String);
dataGrid.Rows[i].Cells[1].Value = "test";
}
}
catch (OleDbException e)
{
MessageBox.Show(e.Message + "\r\n------------------------------------------------------------\r\n\r\n" + e.Source, "OleDbException", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
这是我传递给函数的 SQL 字符串:
SqlQuery("SELECT hot_erldat, hot_kunde, hot_bez, hot_text, hot_losung FROM hotges.dbf WHERE UPPER(SUBSTR(hot_bez, 1, " + sup.Length + ")) = '" + sup + "'");
好吧,在这里你看不到它,但是“hot_kunde”是用户 ID,它在数据库中定义为十进制,但我不需要用户 ID,而是需要名称。我该怎么做这个操作?