2

VFP データベースから一部のデータを選択し、すべてを DataGrid に挿入するツールを作成しました。(ここまですべてが機能するまで...)この時点で、特定の列のいくつかの値を変更したいのですが、「10進数」が予想され、いくつかの文字列を挿入しているため、型が正しくないというエラーが毎回表示されます。 ..

例を挙げて説明します。行 ID を含む列があり、すべてのユーザー ID などを含む別の列があります。必要なのは、ユーザー ID をユーザー名に変更することです。(データベースではなく、私のDataGridのみ)つまり、たとえば、ユーザーID「1234」を含むセルは「John」に変更されます。私の問題:実行時に「1234」を含む列は「10進数」として宣言されるため、文字列を入力できません。

これらの 3 つのコマンドをすべて使用しようとしました (すべてを一緒にではなく、1 つずつ):

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」がスローされます。文字列で値を変更しようとすると、例外が発生します(「10進数を期待する」前に述べたように)。(例: 「テスト」)

私は何かが欠けていますか??

返信ありがとうございます


編集:

わかりました、これが私の実際のコードです:

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 であり、データベースでは 10 進数として定義されていますが、ユーザー ID は必要ありません。代わりに名前が必要です。この操作を行うにはどうすればよいですか?

4

0 に答える 0