name
データセットの列とオブジェクトColumnName
からの一致を検索するために、データセットの行と列をループしようとしていDataReader
ます。
RECORDS
プログラムの起動時に空であるという新しいテーブルがあります。ColumnPositions
また、テーブルで見つかった列名のサブセットで呼び出される、事前設定されたRECORDS
テーブルもあります。このルーチンは、使用可能なすべての列のサブセットをデフォルトの表示スタイルとして表示することを目的としています。
私のコードは機能します...値を取得するコード行を除いてdr["type"]
。エラーが発生します:
名前 '
colType
' は現在のコンテキストに存在しません。
ご覧のとおり、文字列変数は WHILE ループと FOREACH ループの外で宣言されています。行ステートメントcolName =
は問題なく機能します。しかし、colType
毎回失敗します。VS2010 の中間ウィンドウでステートメント チェックを行うと? dr["type"]"
、結果が得られinteger
ます。しかし、 を確認する? colType
と、上記のエラー メッセージが表示されます。
DataRow オブジェクトの Intellisensedr
は、6 つの項目の配列を明らかにします。配列のインデックス 1 は にマップされname
ます。インデックス 2 は にマップされtype
ます。? dr[2]
中間ウィンドウでの値を確認すると、同じ結果が返ってきinteger
ます。正解です。しかし、この値が に割り当てられるたびにcolType
、VS2010 は不平を言います。
私は C# の初心者ではないので、ここに投稿する前に多くのテストとグーグル検索を行いました。これは、私が木を通して森を見ていなかったことが原因であることを願っています。
これが私のコードです:
// get table information for RECORDS
SQLiteCommand tableInfo = new SQLiteCommand("PRAGMA table_info(Records)", m_cnCaseFile);
SQLiteDataAdapter adapter = new SQLiteDataAdapter(tableInfo);
DataSet ds = new DataSet();
adapter.Fill(ds);
DataTable dt = ds.Tables[0];
SQLiteCommand cmd = new SQLiteCommand("SELECT * FROM ColumnPositions WHERE ColumnStyle_ID = " + styleID + " ORDER BY ColumnPosition_ID ASC", m_cnCaseFile);
SQLiteDataReader colReader = cmd.ExecuteReader();
string colName = "";
string colType = "";
if (dt != null && colReader.HasRows)
{
while (colReader.Read())
{
foreach(DataRow dr in dt.Rows)
{
colType = Convert.ToString(dr["type"]);
colName = dr["name"].ToString();
if (colReader["ColumnName"].ToString() == colName)
{
DataGridViewColumn dgvCol = new DataGridViewColumn();
}
}
}
}
dt.Dispose();
colReader.Close();