DataGridView
の列がPRIMARY KEY
またはFOREIGN KEY
のときに通知する方法はありますか?DataGridView:SQLのキー値または関係を判別しますか?
DataGridViewDataColumns
をReadOnly
に設定したいと思います。
DataTable
をロードした後、私はAllowDBNull、自動インクリメント、およびユニークのようなSQLのような特性を見ることができます。どの列がキーであるかをどのようにして知ることができますか?
private void GetData(string tableName, SqlConnection con) {
bool wasOpen = (con.State == ConnectionState.Open);
DataTable table = new DataTable(tableName);
string sqlText = string.Format(SQL_SELECT_COMMAND, tableName);
SqlCommand cmd = new SqlCommand(sqlText, con);
if (!wasOpen) {
con.Open();
}
table.Load(cmd.ExecuteReader());
if (!wasOpen) {
con.Close();
}
dataGridView1.DataSource = table.DefaultView;
for (int i = 0; i < table.Columns.Count; i++) {
DataColumn tblC = table.Columns[i];
DataGridViewColumn dgvC = dataGridView1.Columns[i];
dgvC.ReadOnly = (!tblC.AllowDBNull && tblC.AutoIncrement && tblC.Unique);
}
}
(!tblC.AllowDBNull && tblC.AutoIncrement && tblC.Unique
)上記の最後の行のテストがハックされ、私はそれが唯一のいくつかのケースで動作します知っています。
これを判断するためにSQLクエリを書き込む方法を示すポストHow to determine a primary key for a table in SQL Server?が見つかりましたが、DataGridView
に供給しているDataTable
を使用して何らかのことを伝えることはできますか?
私もLinq-to-SQLを使ってポストC# Linq-to-SQL: Refectoring this Generic GetByID methodを見ましたが、(私は試しても)私はちょうどそのLinqジバリッシュを理解していません。
キーがサポートされていないと判断した場合は、どのような方法が最適でしょうか?スキーマ用とデータ用の2つのクエリが収集されたスキーマを使用してデータを処理しますか?
EDIT:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Table1'
私はCOLUMN_FLAGS
値を返されています:私は、データテーブルのスキーマを見たときは、使用していることに気づきました。私が見ているテーブルは、私のプライマリキーの値が18
であることを示しています。それは良いテストですか?
1恐ろしい、氏ホール。私は 'DataTable'の列を見ていましたが、一度は別の列のセットが含まれているとは考えていませんでした。 – jp2code