मुझे @ किलकारम का काम करने का समाधान मिला, लेकिन अगर उपयोगकर्ता ने बहुत तेजी से क्लिक किया तो वह थोड़ा चकमा दे गया। यकीन नहीं होता कि दूसरे ने पाया कि मामला या तो। मुझे यहां एक और समाधान मिला ।
यह डेटाग्रिड CellValueChanged
और का उपयोग करता है CellMouseUp
। चनघोंग बताते हैं कि
"इसका कारण यह है कि OnCellvalueChanged इवेंट तब तक फायर नहीं करेगा जब तक कि DataGridView आपके द्वारा संपादित पूरा कर लिया गया हो। यह टेक्स्टबॉक्स कॉलम के लिए इंद्रियाँ बनाता है, क्योंकि OnCellvalueChanged प्रत्येक कुंजी स्ट्राइक के लिए फायर करने के लिए [परेशान] नहीं करेगा, लेकिन यह [नहीं करता है] चेकबॉक्स के लिए समझदारी]।
यहाँ यह उनके उदाहरण से कार्यवाही में है:
private void myDataGrid_OnCellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
}
}
और चेकबॉक्स को यह बताने के लिए कोड कि यह क्लिक करने पर संपादन किया जाता है, जब तक उपयोगकर्ता फ़ील्ड छोड़ने तक प्रतीक्षा नहीं करता है:
private void myDataGrid_OnCellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
संपादित करें: एक DoubleClick घटना को माउसअप इवेंट से अलग माना जाता है। यदि DoubleClick ईवेंट का पता चला है, तो अनुप्रयोग पहले माउसअप इवेंट को पूरी तरह से अनदेखा कर देगा। इस तर्क को माउसअप इवेंट के अलावा सेलडबलक्लिक इवेंट में जोड़ना होगा:
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
CurrentCellDirtyStateChanged
ईवेंट की जाँच की ?