Получение значений от DevExpress GridControl

Как заполнять данные в текстовые поля всякий раз, когда я нажимаю на ячейку строки?

Для стандартного DataGridView я могу использовать следующий код

void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    txtguard_id.Text = dataGridView1.SelectedRows[0].Cells["GuardId"].Value.ToString();
    DateHired.Value = (DateTime)dataGridView1.SelectedRows[0].Cells["DateHired"].Value;
    Firstname.Text = dataGridView1.SelectedRows[0].Cells["FirstName"].Value.ToString();
    Middlename.Text = dataGridView1.SelectedRows[0].Cells["MiddleName"].Value.ToString();
    Lastname.Text = dataGridView1.SelectedRows[0].Cells["LastName"].Value.ToString();
    txtguard_street.Text = dataGridView1.SelectedRows[0].Cells["Street"].Value.ToString();
    txtguard_brgy.Text = dataGridView1.SelectedRows[0].Cells["Barangay"].Value.ToString();
    txtguard_procity.Text = dataGridView1.SelectedRows[0].Cells["ProvinceorCity"].Value.ToString();
    txtguard_age.Text = dataGridView1.SelectedRows[0].Cells["Age"].Value.ToString();
    txtguard_bday.Value= (DateTime)dataGridView1.SelectedRows[0].Cells["Birthdate"].Value;
    txtguard_male.Checked = (bool)dataGridView1.SelectedRows[0].Cells["Gender"].Value;
    txtguard_female.Checked = (bool)dataGridView1.SelectedRows[0].Cells["Gender"].Value;
}

Но в GridControl я не знаю, как это сделать...


person JM Olesco    schedule 18.02.2013    source источник
comment
Не могли бы вы уточнить, какое текстовое поле вы хотите заполнить? Это форма редактирования или любое текстовое поле на странице? Кроме того, на сайте devexpress есть различные форумы и помощь по этому вопросу.   -  person Ruchi    schedule 19.02.2013
comment
devexpress.com/Support/Center/p/E2202.aspx   -  person Ruchi    schedule 19.02.2013
comment
devexpress.com/Support/Center/p/Q321001.aspx   -  person Ruchi    schedule 19.02.2013
comment
Может b вышеуказанные ссылки могут помочь. Пожалуйста, дайте мне знать, если это сработало для вас или нет. Благодарю.   -  person Ruchi    schedule 19.02.2013
comment
Я считаю, что здесь есть ответ на вопрос stackoverflow.com/questions/12762617/   -  person Stig    schedule 25.02.2013


Ответы (1)


С DevExpress XtraGrid вы можете использовать практически такой же подход:

using DevExpress.XtraGrid.Views.Grid;
//...
gridView1.RowClick += gridView_RowClick;
//...
void gridView_RowClick(object sender, RowClickEventArgs e) {
    object id = ((GridView)sender).GetRowCellValue(e.RowHandle, "ID");
    testBoxId.Text = id.ToString();
    //...
}

or

using DevExpress.XtraGrid.Views.Grid;
//...
gridView1.RowCellClick += gridView_RowCellClick;
//...
void gridView_RowCellClick(object sender, RowCellClickEventArgs e) {
    object id = ((GridView)sender).GetRowCellValue(e.RowHandle, "ID");
    testBoxId.Text = id.ToString();
    //...
}

Связанная справочная статья: Получение и установка значений ячеек

ОБНОВЛЕНИЕ.
Обратите внимание, что эти события не будут срабатывать при нажатии на ячейку строки, если включено редактирование данных и для свойства ColumnViewOptionsBehavior.EditorShowMode установлено значение MouseDown.

Вы можете отключить редактирование на месте для представления с помощью свойства GridView.OptionsBehavior.Editable.

person DmitryG    schedule 19.02.2013
comment
я хочу заполнить текстовое поле всякий раз, когда на ячейку нажимали .. как это сделать в элементе управления сеткой RowCellCLick .. пожалуйста, помогите мне .. - person JM Olesco; 19.02.2013
comment
@JMOlesco хм ... мой код довольно ясен ... просто передайте значение, которое вы получили из ячейки сетки, в свойство Text текстового поля - person DmitryG; 19.02.2013
comment
я пробовал, но это не работает. ); } он не заполнил назначенное текстовое поле, которое я использовал... (Customer_Id является частью базы данных) - person JM Olesco; 19.02.2013
comment
@JMOlesco Я считаю, что для этого сценария вам следует использовать gridView1.OptionsBehavior.Editable = false. - person DmitryG; 19.02.2013
comment
тем не менее, это не работает для меня. Пожалуйста, опубликуйте фрагмент кода о том, как это сделать. textbox1.Text = dataGridView1.SelectedRows[0].Cells[Street].Value.ToString(); но в gridcontrol, как это сделать, пожалуйста, помогите мне - person JM Olesco; 19.02.2013
comment
@JMOlesco Мой код отлично работает для меня. Пожалуйста, уточните свой вопрос подробно: какова точная структура данных, отображаемых в представлении сетки (таблица/таблицы/поля/столбцы)? Можно ли редактировать эти данные в gridView или нет? Метод GetRowCellValue() получает правильное значение или нет? - person DmitryG; 19.02.2013
comment
нет .. они не редактируются .. я хочу, чтобы всякий раз, когда я нажимаю на другую ячейку gridcontrol, разные данные на нажатом gridcontrol перемещались в другое текстовое поле, которое у меня есть, например, имя, адрес ... это то, что я хочу. .. и еще одна вещь, которую я попробовал ваш код, но я получил исключение, которое является объектом, не является ссылкой на экземпляр.. как решить мою проблему - person JM Olesco; 19.02.2013
comment
@JMOlesco просто не используйте ((GridView)sender).GetRowCellValue(e.RowHandle, ...).ToString() напрямую, потому что ячейка сетки может содержать нулевые значения... используйте безопасный код: object value = ((GridView)sender).GetRowCellValue(e.RowHandle, ...) затем проверьте if(value!=null) textBox.Text=value.ToString()... и используйте отладчик... - person DmitryG; 19.02.2013
comment
теперь это работает .. спасибо, но у меня есть еще один вопрос, как поступить со ссылкой на объект, чтобы не устанавливать экземпляр? .. я щелкнул ячейку customer_id, но я получил там исключение .. как это решить - person JM Olesco; 19.02.2013
comment
Я считаю, что вам следует создать еще один вопрос об этой новой проблеме и опубликовать проблемный код. Таким образом, исходный вопрос завершен, вы можете закрыть обсуждение, приняв правильный ответ... - person DmitryG; 19.02.2013