Проверка ячеек в DevExpress GridControl



Просто простой вопрос, с которым я не могу справиться сам.



У меня есть GridControl DevExpress для Winforms (12.2), заполненный некоторыми числовыми значениями, сетка редактируема, и пользователь может изменить эти значения.



Представьте, что пользователь изменяет один, то, что я хочу, чтобы проверить эту ячейку, чтобы получить соответствующее значение, измененное в моем источнике данных, не нажимая aoutside ячейки.



То есть, я хочу, чтобы пользователь мог проверить и применить все значения, просто нажав a кнопка на панели инструментов, а не нажатие enter, esc или щелчок в таблице.



Я искал некоторые форумы и не получил правильного ответа



Спасибо,

761   2  

2 ответов:

В вашем обработчике для menuItem_click сделайте что-нибудь вроде этого:

private menuItem_Click(object sender, EventArgs e)
{
  gridView1.UpdateCurrentRow(); //return a bool, false = if validation error(s) was found
}

Это заставляет представление проверять входные данные и передавать их в источник данных.

Это зависит от того, что вы хотите сделать. у вас есть 2 варианта. либо проверить строки и возврата функции MessageBox с сообщением об ошибке. или вы можете иметь этот маленький красный " x " внутри ячейки

Оба метода будут работать. но требуют несколько иной реализации. оба метода требуют, чтобы вы подписались на событие Validate row gridview, а не gridcontrol.

Что-то вроде этого даст вам текстовое поле;

private void gridView1_ValidateRow(object sender,
DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e) 
{
    e.Valid = false;
}

И что-то вроде этого даст вам красный 'x' в ячейке;

private void gridView1_ValidateRow(object sender, 
DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e) {
    GridView view = sender as GridView;
    GridColumn inStockCol = view.Columns["UnitsInStock"];
    GridColumn onOrderCol = view.Columns["UnitsOnOrder"];
    //Get the value of the first column
    Int16 inSt = (Int16)view.GetRowCellValue(e.RowHandle, inStockCol);
    //Get the value of the second column
    Int16 onOrd = (Int16)view.GetRowCellValue(e.RowHandle, onOrderCol);
    //Validity criterion
    if (inSt < onOrd) {
        //Set errors with specific descriptions for the columns
        view.SetColumnError(inStockCol, "The value must be greater than Units On Order");
        view.SetColumnError(onOrderCol, "The value must be less than Units In Stock");
    }
}

Информация была найдена здесь: http://documentation.devexpress.com/#windowsforms/DevExpressXtraGridViewsBaseColumnView_ValidateRowtopic

Это все равно потребует от пользователя выхода из ячейки,

Я нашел здесь дополнительную информацию: http://www.devexpress.com/Support/Center/p/A289.aspx

Comments

    Ничего не найдено.