DataGridView.DataSource Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает или задает источник данных, для которого объект DataGridView отображает данные.
public:
property System::Object ^ DataSource { System::Object ^ get(); void set(System::Object ^ value); };
public object DataSource { get; set; }
public object? DataSource { get; set; }
member this.DataSource : obj with get, set
Public Property DataSource As Object
Значение свойства
Объект, содержащий данные, отображаемые в объекте DataGridView.
Исключения
Произошла ошибка в источнике данных, и нет обработчика для события DataError, или обработчик задал для свойства ThrowException значение true
. Объект исключения обычно можно привести к типу FormatException.
Примеры
В следующем примере кода показано, как инициализировать простой объект с привязкой к DataGridViewданным . Здесь также показано, как задать DataSource свойство .
#using <System.Transactions.dll>
#using <System.EnterpriseServices.dll>
#using <System.Xml.dll>
#using <System.Drawing.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Data.dll>
using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;
using namespace System::Windows::Forms;
using namespace System::Drawing;
public ref class Form1: public System::Windows::Forms::Form
{
public:
Form1()
: Form()
{
//This call is required by the Windows Form Designer.
InitializeComponent();
InitializeDataGridView();
//Add any initialization after the InitializeComponent() call
}
protected:
~Form1()
{
if ( components != nullptr )
{
delete components;
}
}
private:
System::Windows::Forms::DataGridView ^ dataGridView1;
System::Windows::Forms::BindingSource ^ bindingSource1;
//Required by the Windows Form Designer
System::ComponentModel::IContainer^ components;
//NOTE: The following procedure is required by the Windows Form Designer
//It can be modified using the Windows Form Designer.
//Do not modify it using the code editor.
[System::Diagnostics::DebuggerNonUserCode]
void InitializeComponent()
{
this->dataGridView1 = gcnew System::Windows::Forms::DataGridView;
this->bindingSource1 = gcnew System::Windows::Forms::BindingSource;
this->SuspendLayout();
//
//DataGridView1
//
this->dataGridView1->Location = System::Drawing::Point( 96, 71 );
this->dataGridView1->Name = "DataGridView1";
this->dataGridView1->Size = System::Drawing::Size( 321, 286 );
this->dataGridView1->TabIndex = 0;
//
//Form1
//
this->ClientSize = System::Drawing::Size( 518, 413 );
this->Controls->Add( this->dataGridView1 );
this->Name = "Form1";
this->Text = "Form1";
this->ResumeLayout( false );
}
internal:
static property Form1^ GetInstance
{
Form1^ get()
{
if ( m_DefaultInstance == nullptr || m_DefaultInstance->IsDisposed )
{
System::Threading::Monitor::Enter( m_SyncObject );
try
{
if ( m_DefaultInstance == nullptr || m_DefaultInstance->IsDisposed )
{
m_DefaultInstance = gcnew Form1;
}
}
finally
{
System::Threading::Monitor::Exit( m_SyncObject );
}
}
return m_DefaultInstance;
}
}
private:
static Form1^ m_DefaultInstance;
static Object^ m_SyncObject = gcnew Object;
void InitializeDataGridView()
{
try
{
// Set up the DataGridView.
dataGridView1->Dock = DockStyle::Fill;
// Automatically generate the DataGridView columns.
dataGridView1->AutoGenerateColumns = true;
// Set up the data source.
bindingSource1->DataSource = GetData( "Select * From Products" );
dataGridView1->DataSource = bindingSource1;
// Automatically resize the visible rows.
dataGridView1->AutoSizeRowsMode = DataGridViewAutoSizeRowsMode::DisplayedCellsExceptHeaders;
// Set the DataGridView control's border.
dataGridView1->BorderStyle = BorderStyle::Fixed3D;
// Put the cells in edit mode when user enters them.
dataGridView1->EditMode = DataGridViewEditMode::EditOnEnter;
}
catch ( SqlException^ )
{
MessageBox::Show( "To run this sample replace connection.ConnectionString"
" with a valid connection string to a Northwind"
" database accessible to your system.", "ERROR", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
System::Threading::Thread::CurrentThread->Abort();
}
catch ( System::Exception^ ex )
{
MessageBox::Show( ex->ToString() );
}
}
DataTable^ GetData( String^ sqlCommand )
{
String^ connectionString = "Integrated Security=SSPI;Persist Security Info=False;"
"Initial Catalog=Northwind;Data Source= localhost";
SqlConnection^ northwindConnection = gcnew SqlConnection( connectionString );
SqlCommand^ command = gcnew SqlCommand( sqlCommand,northwindConnection );
SqlDataAdapter^ adapter = gcnew SqlDataAdapter;
adapter->SelectCommand = command;
DataTable^ table = gcnew DataTable;
adapter->Fill( table );
return table;
}
};
int main()
{
Application::Run( gcnew Form1 );
}
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Drawing;
public class Form1 : System.Windows.Forms.Form
{
private DataGridView dataGridView1 = new DataGridView();
private BindingSource bindingSource1 = new BindingSource();
public Form1()
{
dataGridView1.Dock = DockStyle.Fill;
this.Controls.Add(dataGridView1);
InitializeDataGridView();
}
private void InitializeDataGridView()
{
try
{
// Set up the DataGridView.
dataGridView1.Dock = DockStyle.Fill;
// Automatically generate the DataGridView columns.
dataGridView1.AutoGenerateColumns = true;
// Set up the data source.
bindingSource1.DataSource = GetData("Select * From Products");
dataGridView1.DataSource = bindingSource1;
// Automatically resize the visible rows.
dataGridView1.AutoSizeRowsMode =
DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;
// Set the DataGridView control's border.
dataGridView1.BorderStyle = BorderStyle.Fixed3D;
// Put the cells in edit mode when user enters them.
dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;
}
catch (SqlException)
{
MessageBox.Show("To run this sample replace connection.ConnectionString" +
" with a valid connection string to a Northwind" +
" database accessible to your system.", "ERROR",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
System.Threading.Thread.CurrentThread.Abort();
}
}
private static DataTable GetData(string sqlCommand)
{
string connectionString = "Integrated Security=SSPI;" +
"Persist Security Info=False;" +
"Initial Catalog=Northwind;Data Source=localhost";
SqlConnection northwindConnection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(sqlCommand, northwindConnection);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = command;
DataTable table = new DataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
adapter.Fill(table);
return table;
}
[STAThreadAttribute()]
public static void Main()
{
Application.Run(new Form1());
}
}
Imports System.Data
Imports System.Data.SqlClient
Imports System.Windows.Forms
Imports System.Drawing
Public Class Form1
Inherits System.Windows.Forms.Form
Private WithEvents dataGridView1 As New DataGridView()
Private bindingSource1 As New BindingSource()
Public Sub New()
Me.dataGridView1.Dock = DockStyle.Fill
Me.Controls.Add(Me.dataGridView1)
InitializeDataGridView()
End Sub
Private Sub InitializeDataGridView()
Try
' Set up the DataGridView.
With Me.dataGridView1
' Automatically generate the DataGridView columns.
.AutoGenerateColumns = True
' Set up the data source.
bindingSource1.DataSource = GetData("Select * From Products")
.DataSource = bindingSource1
' Automatically resize the visible rows.
.AutoSizeRowsMode = _
DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders
' Set the DataGridView control's border.
.BorderStyle = BorderStyle.Fixed3D
' Put the cells in edit mode when user enters them.
.EditMode = DataGridViewEditMode.EditOnEnter
End With
Catch ex As SqlException
MessageBox.Show("To run this sample replace " _
& "connection.ConnectionString with a valid connection string" _
& " to a Northwind database accessible to your system.", _
"ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
System.Threading.Thread.CurrentThread.Abort()
End Try
End Sub
Private Shared Function GetData(ByVal sqlCommand As String) _
As DataTable
Dim connectionString As String = _
"Integrated Security=SSPI;Persist Security Info=False;" _
& "Initial Catalog=Northwind;Data Source=localhost"
Dim northwindConnection As SqlConnection = _
New SqlConnection(connectionString)
Dim command As New SqlCommand(sqlCommand, northwindConnection)
Dim adapter As SqlDataAdapter = New SqlDataAdapter()
adapter.SelectCommand = command
Dim table As New DataTable
table.Locale = System.Globalization.CultureInfo.InvariantCulture
adapter.Fill(table)
Return table
End Function
<STAThreadAttribute()> _
Public Shared Sub Main()
Application.Run(New Form1)
End Sub
End Class
Комментарии
Класс DataGridView поддерживает стандартную модель привязки данных Windows Forms. Это означает, что источник данных может иметь любой тип, реализующий один из следующих интерфейсов:
Интерфейс IList , включая одномерные массивы.
Интерфейс IListSource , например классы DataTable и DataSet .
Интерфейс IBindingList , например BindingList<T> класс .
Интерфейс IBindingListView , например BindingSource класс .
Конкретные примеры см. в разделе Пример и таблице задач в конце этого раздела.
Обычно выполняется привязка к компоненту BindingSource, а затем компонент BindingSource привязывается к другому источнику данных или заполняется бизнес-объектами. Компонент BindingSource является предпочтительным источником данных, так как он может выполнять привязку к широкому спектру источников данных и может автоматически устранять множество проблем с привязкой данных.
При привязке к источнику данных, содержащему несколько списков или таблиц, необходимо задать DataMember для свойства строку, задающую список или таблицу для привязки. Однако при привязке к компоненту BindingSource , содержащему DataMember несколько списков или таблиц, можно задать свойство BindingSource компонента.
При привязке к коллекции объектов, а не к данным базы данных, обычно присваивается DataSourceNullValue свойству null
объекта , возвращаемому свойствомDefaultCellStyle, значение , а не значение DBNull.Valueпо умолчанию , которое подходит для данных базы данных.
Дополнительные сведения см. в разделе Отображение данных в элементе управления Windows Forms DataGridView. В следующей таблице приведены прямые ссылки на распространенные задачи, связанные со свойством DataSource .
См. статьи Пошаговое руководство. Создание основной и подробной формы с использованием двух элементов управления DataGridView Windows Forms и Практическое руководство. Привязка объектов к Windows Forms элементам управления DataGridView.