¿Hay alguna manera de saber cuándo DataGridView
columnas es PRIMARY KEY
o FOREIGN KEY
?DataGridView: ¿Determina los valores o las relaciones clave SQL?
La razón por la que pregunto es porque me gustaría configurar estos DataGridViewDataColumns
para ser ReadOnly
.
Después de cargar un DataTable
, puedo ver propiedades similares a SQL como AllowDBNull, AutoIncrement y único; pero ¿cómo puedo decir qué columnas son claves?
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);
}
}
La prueba de que la última línea anterior (!tblC.AllowDBNull && tblC.AutoIncrement && tblC.Unique
) es un truco, y sé que sólo funciona en algunos casos.
He encontrado el puesto How to determine a primary key for a table in SQL Server? que muestra cómo escribir una consulta SQL para determinar esto, pero puedo saber de alguna manera con el DataTable
que yo proporciono a la DataGridView
?
También vi la publicación C# Linq-to-SQL: Refectoring this Generic GetByID method usando Linq-to-SQL, pero (aunque lo intento) simplemente no entiendo que Linq jibberish.
Si no es posible determinar la clave, ¿cuál sería el mejor enfoque? Dos consultas, una para el esquema y otra para los datos, luego pasan por los datos usando el esquema recopilado.
EDIT: he notado que cuando se mira en el esquema de la tabla de datos usando:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Table1'
me he vuelto un valor COLUMN_FLAGS
. La tabla que estoy viendo muestra un valor de 18
para mi clave principal en esta tabla. ¿Es esa una buena prueba?
+1 impresionante, señor Hall. Estaba mirando las Columnas 'DataTable' y nunca pensé que podría contener un conjunto separado de columnas. – jp2code