在网格视图和数据上添加额外的列

Posted

技术标签:

【中文标题】在网格视图和数据上添加额外的列【英文标题】:Adding an extra column onto a gridview and data 【发布时间】:2016-07-21 12:22:54 【问题描述】:

我有一个在搜索数据库后填充的网格视图,之后我在这样的 foreach 循环中进行了一些计算

foreach(DataRow datarow in ds.Tables[0].Rows)
    resturantPostCodeData = checkpostcode(datarow["PostCode"].ToString().Trim());
    foreach(DataRow dr in resturantPostCodeData.Tables["geo"].Rows)
        rLatitude = Convert.ToDouble(dr["lat"].ToString().Trim());
        rLongitude = Convert.ToDouble(dr["lng"].ToString().Trim());
    
    distanceResult = distance(myLatitude, myLongitude, rLatitude, rLongitude);

foreach 循环底部的值distanceResult 我希望将这些结果添加到自己列中的gridview 的末尾

关于如何做到这一点的任何想法?

我正在c#asp.net 中制作一个网络应用程序

希望你能理解我的问题

【问题讨论】:

请添加您的 gridview 标记。 【参考方案1】:

您可以在绑定 GridView 之前将该列添加到 DataTable:

DataTable dt = ds.Tables[0];
dt.Columns.Add(new DataColumn("DistanceResult", System.Type.GetType("System.Double")));

foreach (DataRow row in dt.Rows)

    ...
    row["DistanceResult"] = distance(...);


gvDistance.DataSource = dt.DefaultView;
gvDistance.DataBind();

然后将 BoundField 添加到 GridView:

<asp:GridView ID="gvDistance" runat="server" ...>
    <Columns>
        ...
        <asp:BoundField DataField="DistanceResult" ... />
    </Columns>
</asp:GridView>

【讨论】:

对 ConnonrsFan 回复的补充,您可以在 RowDataBound 上手动绑定该列,但这会更难维护,我建议使用此解决方案,但我不确定您是否需要在之后添加 dt.AcceptChanges();行更新数据。 @thepanch - 我经常用这种方式添加字段,而且我从来不用打电话给dt.AcceptChanges【参考方案2】:

我最终使用了类似于 ConnorsFan 给出的答案的这两行代码

ds.Tables[0].Columns.Add("Distance in miles", typeof(double));

稍后在代码中分配我使用的值时

datarow["Distance in miles"] = distanceResult;

谢谢大家的帮助

【讨论】:

以上是关于在网格视图和数据上添加额外的列的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中自定义网格视图的额外不必要渲染问题

刷新数据网格视图

如何清除数据网格视图

如何使单元格仅在填充后才能读取?数据网格视图 C#

在触摸该列时上下移动 Gridview 的列

如何在网格中显示列并将其隐藏在视图对话框中