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

Я нашел несколько решений для Objective C и ни одного специально для Monotouch. В итоге я разработал метод расширения, основанный на наиболее популярном решении для IOS:

public static class UIColorExtensions
    {
        public static UIColor FromHex(this UIColor color,int hexValue)
        {
            return UIColor.FromRGB(
                (((float)((hexValue & 0xFF0000) >> 16))/255.0f),
                (((float)((hexValue & 0xFF00) >> 8))/255.0f),
                (((float)(hexValue & 0xFF))/255.0f)
            );
        }
    }

, и использую его так:

new UIColor().FromHex(0x4F6176);

Обновление , похоже, что в выключенном Monotouch 5.4 UIColor не имеет конструктора без параметров, поэтому используйте его так:

 UIColor.Clear.FromHex(0xD12229);
8
задан jrsconfitto 12 December 2013 в 03:06
поделиться

4 ответа

Это связано с тем, что отредактированное значение ячейки не фиксируется в DataSource до тех пор, пока не будет проверено, что происходит, когда ячейка теряет фокус. Если вы хотите немедленно зафиксировать изменения, вы можете обработать событие CurrentCellDirtyStateChanged и вызвать метод CommitEdit в обработчике:

void dataGridView1_CurrentCellDirtyStateChanged(object sender,
    EventArgs e)
{
    if (dataGridView1.IsCurrentCellDirty)
    {
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}
16
ответ дан 3 November 2019 в 12:50
поделиться

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

Я использую несколько " грязный "подход, чтобы сделать это в одном из моих приложений:

if (dataGridView1.CurrentCell.IsInEditMode)    
{    
    int y = dataGridView1.CurrentCellAddress.Y;    
    int x = dataGridView1.CurrentCellAddress.X;    
    if (y > 0)      
        dataGridView1.CurrentCell = dataGridView1.Rows[y - 1].Cells[x];    
    else    
        dataGridView1.CurrentCell = dataGridView1.Rows[y + 1].Cells[x];    
    dataGridView1.CurrentCell = dataGridView1.Rows[y].Cells[x];    
}

Этот фрагмент кода сначала проверяет, находится ли текущая ячейка в режиме редактирования. Затем он программно изменяет текущую ячейку (либо на предыдущую, либо на следующую строку, если мы находимся в первой строке). После этого восстанавливается текущий выбор ячеек.

Этот код можно вызвать в обработчике «Сохранить как файл».

4
ответ дан 3 November 2019 в 12:50
поделиться

Вы можете получить значение ячейки, которая еще не зафиксирована, используя свойство EditedFormattedValue для текущей ячейки, как показано ниже

dataGridView1.CurrentCell.EditedFormattedValue
0
ответ дан 3 November 2019 в 12:50
поделиться

Лучший способ (хотя и быстрый и грязный) - присвоить значение currentCell Nothing .

Например, в методе сохранения выполните:

dgvMyGrid.CurrentCell = Nothing

а затем продолжить.

16
ответ дан 3 November 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: