4

row numberMVCWebGridのように列が必要です。どうすればいいですか?

4

5 に答える 5

11

これは本当に素晴らしいアプローチですが、並べ替えやページングを使用すると、RowNumber値はページの1から始まりません。

私のプロジェクトでは、WebGridのページング/並べ替えとは関係なく、行のインデックスを知る必要がある場合があり、次の解決策に出くわしました。

grid.Column(
    Header: "RowNumber",
    Format: item => item.WebGrid.Rows.IndexOf(item) + 1
)
于 2013-01-09T08:48:36.110 に答える
9

行番号を示すプロパティを含むビューモデルを使用できます。

次のドメインモデルがあるとします。

public class DomainModel
{
    public string Foo { get; set; }
}

次に、ビューの要件に対応するビューモデルを作成します。

public class MyViewModel
{
    public int RowNumber { get; set; }
    public string Foo { get; set; }
}

その後:

public ActionResult Index()
{
    // fetch the domain model from somewhere
    var domain = Enumerable.Range(1, 5).Select(x => new DomainModel
    {
        Foo = "foo " + x
    });

    // now build the view model
    // TODO: use AutoMapper to perform this mapping
    var model = domain.Select((element, index) => new MyViewModel
    {
        RowNumber = index + 1,
        Foo = element.Foo
    });

    return View(model);
}

もちろん、ビューはビューモデルに強く型付けされます。

@model IEnumerable<MyViewModel>

@{
    var grid = new WebGrid(Model);
}

@grid.GetHtml(
    columns: grid.Columns(
        grid.Column("RowNumber"),
        grid.Column("Foo")
    )
)

ここで、なんらかの愚かな理由でビューモデルを使用したくないと仮定しましょう。この場合、必要に応じてビューをスパゲッティコードに変えることができます。

@model IEnumerable<DomainModel>

@{
    var grid = new WebGrid(Model.Select((element, index) => new { element, index }));
}

@grid.GetHtml(
    columns: grid.Columns(
        grid.Column("RowNumber", format: item => item.index + 1),
        grid.Column("Foo", format: item => item.element.Foo)
    )
)
于 2012-08-20T08:35:10.950 に答える
6

次のコードを追加するだけです

grid.Column(header: "No."
,format: item => item.WebGrid.Rows.IndexOf(item) + 1 
          + Math.Round(Convert.ToDouble(grid.TotalRowCount / grid.PageCount) / grid.RowsPerPage) 
            * grid.RowsPerPage * grid.PageIndex)

詳細については、このリンクを確認してください

これが誰かに役立つことを願っています

于 2014-09-04T14:58:14.603 に答える
4
    @{
    int i=0;
foreach (var item in Model) {
    <tr>
    <td>
    @i
    </td>
        <td>
            @Html.DisplayFor(modelItem => item.Expense)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.Id }, new { onclick = "return confirm('Are you sure you wish to delete this record?');" })

        </td>
    </tr>
    i++;
}
}

これを試して

于 2012-08-20T09:29:36.657 に答える
-1

これを追加:

grid.Column(header: "No.",
        format: item => item.WebGrid.Rows.IndexOf(item) + 1 + Math.Round(Convert.ToDouble(grid.TotalRowCount / grid.PageCount) / grid.RowsPerPage) * grid.RowsPerPage * grid.PageIndex)
于 2016-09-01T12:56:59.223 に答える