3

私はこのコンボボックスを持っています

BindingSource srd = new BindingSource();
srd.DataSource = llenar.Tables["cnae"];
CmbCnaePrin.DataSource = srd;
CmbCnaePrin.DisplayMember = "cnae_descricao";
CmbCnaePrin.ValueMember = "cnae_id";

これをロードしたい

int cnaepr;
DataTable dt3 = new DataTable();
dt3 = ifd.cnaeclas(cnaepr);
txtCnaeC.Text = dt3.Rows[0][2].ToString();
txtCnaeSC.Text = dt3.Rows[0][3].ToString();

しかし、私は変換できません

 cnaepr=Convert.ToInt32(CmbCnaePrin.SelectedValue)

このエラーを返します。タイプ'System.Data.DataRowView'のオブジェクトをタイプ'System.IConvertible'にキャストできません。

4

3 に答える 3

4

SelectedValueプロパティでToString()を呼び出してみてください。

cnaepr=Convert.ToInt32(CmbCnaePrin.SelectedValue.ToString());

エラーはほぼ正確にそれが言っていることです。SelectedValueプロパティは非常に汎用的に設計されているため、DataTableで見つけることができるものであれば何でもかまいません。それがあり得るもののほとんどは「コンバーチブル」タイプではありません(IConvertibleを実装します)。

于 2012-10-23T15:57:45.220 に答える
0

私はsmapleテストアプリケーションであなたの問題を再現することができました、そして私はあなたに2つの可能な解決策を提案することができます。

とのBindingSource間のプロキシにすぎないオブジェクトを削除できます。DataTableComboBox

このソリューションを適用すると、コードは次のようになります。

CmbCnaePrin.DataSource = llenar.Tables["cnae"];
CmbCnaePrin.DisplayMember = "cnae_descricao";
CmbCnaePrin.ValueMember = "cnae_id";

残りは変更できず、でStringオブジェクトを取得する必要がありますCmbCnaePrin.SelectedValue

代替ソリューション(更新)

または、BindingSourceを使用することもできますが、値を直接取得する場合は、ケースだけでなく、でDataRowView返されるハンドルも使用できます。CmbCnaePrin.SelectedValue

このソリューションを適用すると、コードは次のようになります。

DataRowView selectedValue = (CmbCnaePrin.SelectedValue as DataRowView);
if (selectedValue != null)
{
    cnaepr = Convert.ToInt32(selectedValue.Row["cnae_id"]);
}
else
{
    cnaepr = Convert.ToInt32(CmbCnaePrin.SelectedValue);
}

残りは変更しないでおくことができます。

これで問題が解決するかどうか教えてください。

于 2012-10-23T16:24:09.277 に答える
0

DataSourceを割り当てる前に、コンボボックスDisplayMemberとValueMemberを設定してみてください。

CmbCnaePrin.DisplayMember = "cnae_descricao";
CmbCnaePrin.ValueMember = "cnae_id";
CmbCnaePrin.DataSource = srd;

DataSourceを設定した後にそれらを割り当てるということは、コンボボックスがDataRow(この場合はDataViewのDataRowView)であるDataTableのデフォルトのイテレーターを使用しようとしていることを意味すると思います。したがって、ValueMemberとDisplayMemberを割り当てる前に、それらを独自に設定します。

于 2012-10-23T17:54:58.257 に答える