2012-02-08 80 views
0

我正在使用此代码打开表单。这个相同的代码会在我的应用程序中打开其他表单,但在这种情况下,它会导致错误,我不知道为什么。Datagridview尝试打开表单时出错

private void dataGridView2_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
{ 
    System.Data.DataRowView SelectedRowView; 
    waterDataSet.DEMRow SelectedRow; 

    **SelectedRowView = (System.Data.DataRowView)waterDataSetBindingSource.Current;** 
    SelectedRow = (waterDataSet.DEMRow)SelectedRowView.Row; 

    frmWater WaterForm = new frmWater(this); 
    WaterForm.LoadWaterAcct(SelectedRow.WATER_ACCOUNT, null); 
    WaterForm.Show(); 
} 

我正的错误是:

System.InvalidCastException了未处理 消息=无法转换类型 'System.Data.DataViewManagerListItemTypeDescriptor' 的目的为类型 'System.Data.DataRowView' 。

在DataGridView正在填充这个:

public void LoadWaterAcct(String waterAcct, String tableName) 
{ 
    aRTableAdapter.FillByWaterAct(waterDataSet.AR, waterAcct); 
} 

该错误是由加粗线触发。任何帮助将不胜感激。

回答

0

dataGridViewRow.DataBoundItem应该包含数据。然后,你可以:

private void dataGridView2_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
{ 
    var selRow = this.yourDataGridView.SelectedRows.FirstOrDefault(); 
    // or 
    // var selRow = this.yourDataGridView.Rows[e.RowIndex]; 

    if (selRow != null) { 
    var selRowData = selRow.DataBoundItem as waterDataSet.DEMRow; 
    if (selRowData != null) { 
     frmWater WaterForm = new frmWater(this); 
     WaterForm.LoadWaterAcct(selRowData.WATER_ACCOUNT, null); 
     WaterForm.Show(); 
    } 
    } 
} 

希望帮助你...

+0

punker76感谢您的答复。当我使用该代码时,selRowData将始终显示为空,因此表单无法打开。有任何想法吗? – korrowan 2012-02-08 15:25:27

+0

@korrowan你可以发布什么selRow.DataBoundItem持有?是哪种类型? – punker76 2012-02-08 15:32:09

+0

你可以更具体,因为我不确定什么是DataBoundItem或它应该保持什么。 – korrowan 2012-02-08 15:47:02

相关问题