0

次の 2 つのコード サンプルを使用して、両方とも赤い x を削除しようとしましたが、表示時に無限ループが発生します。セルが何らかの理由で RowPrePaint の AddNewIndex .bmp に設定されると、RowPrePaint が再度呼び出されます。e は再び 0 になり、ループし続けます。RowPrePaint を再度実行せずに AddNewIndex .bmp に値を設定する方法を知っている人はいますか? (または、赤い x を削除する別の方法はありますか?) また、次回わかるように、RowPrePaint が複数回呼び出される原因は何ですか?

    private void tableDocTypes_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
    {
        if (e.RowIndex >= tableDocTypes.NewRowIndex)
            tableDocTypes.Rows[e.RowIndex].Cells[columnDocTypeImage.Index].Value = Properties.Resources.AddNewIndex;
    }


    private void tableDocTypes_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
    {
        if (tableDocTypes.Rows[e.RowIndex].IsNewRow) 
            tableDocTypes.Rows[e.RowIndex].Cells[columnDocTypeImage.Index].Value = Properties.Resources.AddNewIndex;
    }

また、コンストラクターに次を追加します。

        InitializeComponent();
        tableDocTypes.Columns[columnDocTypeImage.Index].DefaultCellStyle.NullValue = Properties.Resources.AddNewIndex;
4

3 に答える 3

0

DataGridViewにDataSetを設定する場合は、テーブルを作成するときに次のコードを追加します。

DataTable dt = new DataTable();

dt.Columns.Add("ImageColumn");
dt.Columns["ImageColumn"].DataType = typeof(Byte[]);

データベースからデータを入力する場合でも、データをテーブルに追加する前にこれを設定できます。

于 2012-06-14T19:17:44.783 に答える
0

RowPrePaint は、行を再描画する必要があるときに発生します。行内の何かを変更した場合、その行を再描画する必要があり、無限に再帰します。

何を達成しようとしているのかは完全にはわかりませんが、特定のセルに表示される内容を変更したいと考えています。これを行う最善の方法の 1 つは、CellFormatting イベントを処理することです。DataGridViewCellFormattingEventArgs.Valueその場合、基になるデータではなく、渡された を変更します。

于 2012-06-14T18:19:27.963 に答える