更改DataGridView的DataType

时间:2012-05-28 19:53:31

标签: c# datagridview value-type

我做了一个工具,从VFP-Database中选择一些数据并将所有内容都插入到DataGrid中。 (直到这里一切正常......)此时我想更改某个特定列的某些值,但每次都会出现错误,说该类型不正确,因为“decimal”是预期的,我正在插入一些字符串。 ..

我将用一个例子来解释。有一个包含行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-String:

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,而是我需要这个名字。我该怎么做呢?

0 个答案:

没有答案