DataSet, DataAdapter, нет первичного ключа dataTable


Итак, у меня есть это:

Dim sql As String = "SELECT * FROM Articles"
dAdapter = New OleDbDataAdapter(sql, connection)
dSet = New DataSet("tempDatatable")

With connection
    .Open()
    dAdapter.Fill(dSet, "Articles_table")
    .Close()
End With

With DataGridView1
    .DataSource = dSet
    .DataMember = "Articles_table"
End With

И я задаюсь вопросом, существует ли какой-либо возможный способ определить первый столбец в качестве первичного ключа. Я огляделся, но все используют ручной datatable, чтобы заполнить datagrid. Поскольку я использую базу данных, я не знаю, как установить первичный ключ оттуда. Мне нужна помощь.

3 4

3 ответа:

Вы можете добавить первичный ключ в таблицу данных, используя что-то вроде этого:

var table = dSet.Tables["Articles_table"];
table.PrimaryKey = new DataColumn[] { table.Columns[0] };

Извините, просто понял, что вопрос был помечен vb.net, а не c#. VB.net было бы:

Dim table = dSet.Tables("Articles_table")
table.PrimaryKey = New DataColumn() {table.Columns(0)}

Вы должны установить DataAdapterMissingSchemaAction to AddWithKey:

var table = new DataTable();
using(var con = new SqlConnection(connectionString))
using (var da = new SqlDataAdapter("SELECT * FROM Articles", con))
{
    da.MissingSchemaAction = MissingSchemaAction.AddWithKey
    da.Fill(table);
}

Edit: VB.NET:

Dim table = New DataTable()
Using con = New SqlConnection(connectionString)
    Using da = New SqlDataAdapter("SELECT * FROM Articles", con)
        da.MissingSchemaAction = MissingSchemaAction.AddWithKey
        da.Fill(table)
    End Using
End Using
Теперь необходимые столбцы и первичная ключевая информация для завершения схемы автоматически добавляются в DataTable.

Читать: заполнение набора данных из DataAdapter

Пожалуйста, сделайте это вот так.

Dim objTmpTable As New DataTable
   objTmpTable.PrimaryKey = New DataColumn() {objTmpTable.Columns(0)}
   dgrdMeasure.DataSource = objTmpTable
   dgrdMeasure.DataBind()

То есть, перед назначением в Grid, просто установите первичный ключ.