Совместное использование DataTable между несколькими формами в winforms - PullRequest
0 голосов
/ 02 июня 2009

Я пытаюсь написать простое приложение Win Framework для Compact Framework. Основная форма имеет DataGrid, привязанную к DataTable (с данными из XML-файла). Я хочу вызвать другую форму, которая отображает детали текущей записи. У меня есть что-то вроде следующего кода в качестве конструктора для формы детализации.

public DetailsForm(DataTable dtLandlords, int Index) //the constructor
{
  InitializeComponent();
  lLandlordCode.DataBindings.Add("Text", dtLandlords, "LandlordID");
  .......
}

Я звоню конструктору со следующим кодом

    Form frm = new LandlordDetailsForm(dtLandlords, dataGrid1.CurrentRowIndex);
    frm.Show();

Как мне заставить его отображать текущую запись (указанную в индексе - в настоящее время не используется), а не только первую запись. Или есть лучший способ, которым я должен это делать?

1 Ответ

1 голос
/ 02 июня 2009

Привязки данных «привязывают» к предоставленному «представлению», в настоящее время вы привязываете к DataTable без установки представления по умолчанию (поэтому по умолчанию будет заполнена полная таблица). Например. dtLandlords.DefaultView.RowFilter = "LandlordID = TheIdYouWant";

Другой способ сделать это - добавить сам DataGrid / GridView к DataBingings, который предоставит представление по умолчанию, содержащее выбранный в данный момент элемент.

Редактировать: добавлен пример привязки к DataGridView

Примером этого является: Сначала создайте форму с TextBox и DataGridView (имена по умолчанию). Затем поместите этот код в конструктор формы.

DataTable dt = new DataTable();
dt.Columns.Add("Col1");
dt.Columns.Add("Col2");
DataRow dr;
dr = dt.NewRow();
dr[0] = "C1R1";
dr[1] = "C2R1";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "C1R2";
dr[1] = "C2R2";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "C1R3";
dr[1] = "C2R3";
dt.Rows.Add(dr);

this.dataGridView1.DataSource = dt;
this.textBox1.DataBindings.Add("Text", dataGridView1.DataSource, "Col1");

Затем запустите и выберите элементы в GridView, и текстовое поле должно автоматически обновляться с выбранными деталями. Примечание: я использовал DataGridView здесь, я предполагаю, что он также будет работать для DataGrids (который, я думаю, вы используете)

...