2

DataGridView があり、これをデータベースにバインドします。

行番号を自動的に作成するために、DataGridView で次のコードを使用します。

dgv.Rows[e.RowIndex].Cells[0].Value = e.RowIndex +1;

しかし、結果は大丈夫ではありません。この数を作るのを手伝ってください。

更新: 結果:

1      ssss      mmmm
2      tttt      tttt
       rrrrr     rrrr
       tttttt    tttt
....

したがって、最後の 2 行には数値が表示されません。

4

4 に答える 4

2

これRowsAddedではイベントは機能しません。デバッグ出力をイベント ハンドラーに追加してみてください。イベントが単一の行ではなく行のセットに対して発生することがわかります。これが、最初の 2 つの値のみが入力される理由です。

これを行うのに適した場所は、DataBindingCompleteおよびDefaultValuesNeededイベントです。

DataBindingComplete最初のロードですべての値が入力され、その後DefaultValuesNeededすべての新しい行が入力されます。

DataBindingComplete:

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow r in dataGridView1.Rows)
    {
        r.Cells["AutoGenColumn"].Value = r.Index + 1;
    }
}

必要なデフォルト値:

void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
    dataGridView1.Rows[e.Row.Index].Cells["AutoGenColumn"].Value = e.Row.Index + 1;
}

この要件は少し変わっているように思えます - なぜこの番号が必要なのか説明していませんが、代わりに基礎となるデータセットに行を追加することを検討したい場合があります (たとえば、DataTable を使用すると非常に簡単です)。 Subekが示唆する行ヘッダー。


最後に 1 つ注意してください - この種の自動生成された列は通常、CellValidatingイベントで行うのが最適です。たとえば、他の 2 つの列を合計する列がある場合などです。あなたの列は他の列に基づいていないため、ここでは機能しませんが、一般的な方法として言及する価値があります。

于 2012-07-15T12:48:48.983 に答える
0

ヘッダーセルに表示できます..

DataGridView gridView = sender as DataGridView;

    if (null != gridView)
    {
        foreach (DataGridViewRow r in gridView.Rows)
        {
            gridView.Rows[r.Index].HeaderCell.Value = (r.Index + 1).ToString();
        }
    }
于 2012-07-15T09:56:10.323 に答える
0

私はこれが最も簡単だと信じています、私にとっては100%うまくいきます

<asp:TemplateField HeaderText="Sl. No.">
   <ItemTemplate>
       <%# Container.DataItemIndex + 1 %>
   </ItemTemplate>
</asp:TemplateField>

ここに画像の説明を入力

于 2016-02-29T06:13:02.523 に答える