Procedimiento para enlazar un objeto DataView a un control DataGridView de formularios Windows Forms
El control DataGridView proporciona una forma eficaz y flexible de mostrar datos en formato de tabla. El control DataGridView admite el modelo de enlace de datos de Windows Forms estándar, por lo que se enlazará a DataView y a otros orígenes de datos. Sin embargo, en la mayoría de las situaciones se enlazará a un componente BindingSource que administrará los detalles de la interacción con el origen de datos.
Para obtener más información sobre el control DataGridView, consulte Control DateTimePicker.
Para conectar un control DataGridView a DataView
Implemente un método que controle los detalles de recuperación de datos desde una base de datos. En el ejemplo de código siguiente se implementa un método
GetData
que inicializa un componente SqlDataAdapter y lo utiliza para rellenar un DataSet. Asegúrese de asignar a la variableconnectionString
un valor que sea adecuado para la base de datos. Necesitará tener acceso a un servidor que tenga la base de datos de ejemplo AdventureWorks de SQL Server instalada.void GetData() { try { // Initialize the DataSet. _dataSet = new DataSet { Locale = CultureInfo.InvariantCulture }; // Create the connection string for the AdventureWorks sample database. const string connectionString = "..."; // Create the command strings for querying the Contact table. const string contactSelectCommand = "SELECT ContactID, Title, FirstName, LastName, EmailAddress, Phone FROM Person.Contact"; // Create the contacts data adapter. _contactsDataAdapter = new SqlDataAdapter( contactSelectCommand, connectionString); // Create a command builder to generate SQL update, insert, and // delete commands based on the contacts select command. These are used to // update the database. var contactsCommandBuilder = new SqlCommandBuilder(_contactsDataAdapter); // Fill the data set with the contact information. _contactsDataAdapter.Fill(_dataSet, "Contact"); } catch (SqlException ex) { MessageBox.Show(ex.Message); } }
Private Sub GetData() Try ' Initialize the DataSet. dataSet = New DataSet() dataSet.Locale = CultureInfo.InvariantCulture ' Create the connection string for the AdventureWorks sample database. Dim connectionString As String = "..." ' Create the command strings for querying the Contact table. Dim contactSelectCommand As String = "SELECT ContactID, Title, FirstName, LastName, EmailAddress, Phone FROM Person.Contact" ' Create the contacts data adapter. contactsDataAdapter = New SqlDataAdapter( _ contactSelectCommand, _ connectionString) ' Create a command builder to generate SQL update, insert, and ' delete commands based on the contacts select command. These are used to ' update the database. Dim contactsCommandBuilder As SqlCommandBuilder = New SqlCommandBuilder(contactsDataAdapter) ' Fill the data set with the contact information. contactsDataAdapter.Fill(dataSet, "Contact") Catch ex As SqlException MessageBox.Show(ex.Message) End Try End Sub
En el controlador de eventos Load del formulario, enlace el control DataGridView al componente BindingSource y llame al método
GetData
para recuperar los datos de la base de datos. El DataView se crea a partir de una consulta LINQ to DataSet en Contact DataTable y luego se enlaza al componente BindingSource.void Form1_Load(object sender, EventArgs e) { // Connect to the database and fill the DataSet. GetData(); contactDataGridView.DataSource = contactBindingSource; // Create a LinqDataView from a LINQ to DataSet query and bind it // to the Windows forms control. EnumerableRowCollection<DataRow> contactQuery = from row in _dataSet.Tables["Contact"].AsEnumerable() where row.Field<string>("EmailAddress") != null orderby row.Field<string>("LastName") select row; _contactView = contactQuery.AsDataView(); // Bind the DataGridView to the BindingSource. contactBindingSource.DataSource = _contactView; contactDataGridView.AutoResizeColumns(); }
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load ' Connect to the database and fill the DataSet. GetData() contactDataGridView.DataSource = contactBindingSource ' Create a LinqDataView from a LINQ to DataSet query and bind it ' to the Windows Forms control. Dim contactQuery = _ From row In dataSet.Tables("Contact").AsEnumerable() _ Where row.Field(Of String)("EmailAddress") <> Nothing _ Order By row.Field(Of String)("LastName") _ Select row contactView = contactQuery.AsDataView() ' Bind the DataGridView to the BindingSource. contactBindingSource.DataSource = contactView contactDataGridView.AutoResizeColumns() End Sub