2013-05-31 185 views
1

我犯了一個錯誤handelder,它將在我輸入無效的時間或日期格式(如12:456和55-32-1986)時激活。然後程序應該將單元格值更改回prev值。以編程方式無法編輯dataGridView單元格的值

我使用.NET 4.5,這是一個WinForms應用程序

代碼:

dataGridView2.DataError += dataGridView2_DataError; 

private void dataGridView2_DataError(object sender, DataGridViewDataErrorEventArgs anError) 
{ 
    // MessageBox.Show("Error happened " + anError.Context.ToString()); 

    if (anError.Context == DataGridViewDataErrorContexts.Commit) 
    { 
     MessageBox.Show("Commit error"); 
    } 

    if (anError.Context == DataGridViewDataErrorContexts.CurrentCellChange) 
    { 
     MessageBox.Show("Cell change"); 
    } 

    if (anError.Context == DataGridViewDataErrorContexts.Parsing) 
    { 
     MessageBox.Show("parsing error"); 
    } 

    if (anError.Context == DataGridViewDataErrorContexts.LeaveControl) 
    { 
     MessageBox.Show("leave control error"); 
    } 

    if ((anError.Exception) is ConstraintException) 
    { 
     DataGridView view = (DataGridView)sender; 
     view.Rows[anError.RowIndex].ErrorText = "an error"; 
     view.Rows[anError.RowIndex].Cells[anError.ColumnIndex].ErrorText = "an error"; 

     anError.ThrowException = false; 
    } 

    if ((anError.Exception) is FormatException) 
    { 
     if (dataGridView2.CurrentCell == dataGridView2.CurrentRow.Cells[3]) 
     { 
      MessageBox.Show("Please enter a valid time value" + prevTime); 
      dataGridView2.CurrentCell.Value = prevTime; 
      dataGridView2.EndEdit(); 
     } 
     if (dataGridView2.CurrentCell == dataGridView2.CurrentRow.Cells[2]) 
     { 
      MessageBox.Show("Please enter a valid date"); 
      dataGridView2.CurrentCell.Value = prevDate; 
      dataGridView2.EndEdit(); 
     } 
    } 

    //cell types 
    d.Tables.Add(booking); 
     booking.Columns.Add("nr.", typeof(int)); 
     booking.Columns.Add("Name", typeof(string)); 
     booking.Columns.Add("Date", typeof(DateTime)); 
     booking.Columns.Add("Time", typeof(DateTime)); 

    //Datasource 
    dataGridView2.DataSource = booking; 
} 

prevDate-和TIMEVALUE在datagrid_onBeginEdit聲明,好讓我的價值觀。

我有prev值。代碼從頭到尾運行。但是從第2行開始,它不會以編程方式更改單元格的值。我只能做到這一點, ,當代碼不能改變的值,那麼錯誤消息框不斷出現。 datagridview不是隻讀的。

Cells:nr。 /姓名/日期/時間

任何幫助將不勝感激,在此先感謝。

編輯:我添加了事件的完整代碼handeler

PS。如果我在某個地方不清楚,或者如果你需要更多的信息,那就告訴你需要什麼。

+0

也許這對其他人更清楚,但是,你的UI框架是什麼? WPF?的WinForms?的WebForms? – Jay

+0

你在哪裏打電話給你的事件處理程序?這是來自'DataGridView'上的特定事件嗎?如果是這樣,哪一個? –

回答

3

你不需要自己保存prevDate和prevTime,我已經嘗試恢復值,但似乎我們不能改變它們(我仍然興奮地發現如何在上下文中改變它們) 。但我在這裏爲你提供了最好的解決方案,我們只需要使用DataGridView的方法CancelEdit(),它應該是你想要的,儘管它不顯示如何更改你的問題中描述的上下文中的單元格值。下面是代碼:

if ((anError.Exception) is FormatException) 
{ 
    if (dataGridView2.CurrentCell == dataGridView2.CurrentRow.Cells[3]) 
    { 
     MessageBox.Show("Please enter a valid time value" + prevTime); 
     dataGridView2.CancelEdit();//Only this works 
    } 
    if (dataGridView2.CurrentCell == dataGridView2.CurrentRow.Cells[2]) 
    { 
     MessageBox.Show("Please enter a valid date"); 
     dataGridView2.CancelEdit();//Only this works 
    } 
} 

我希望它能幫助,再一次,我還是興奮如何改變在這方面的單元格值。如果我找到了解決辦法,我會把它作爲你的另一個答案發布。謝謝!

+0

這只是完美的,非常感謝 – MasterXD

相關問題