0

目前我正在使用带有 objectdatasource 的 gridview 来显示产品信息表。我还有一个下拉列表可以在英制和公制单位之间切换视图。要在两者之间切换,每次有人更改下拉列表选择时,我都会删除旧的单位列并根据选择插入一个新列,如下所示:

if (GridView1.Columns.Count > 7)
     JobListGridView.Columns.Remove(GridView1.Columns[7]);

BoundField colIndex8 = new BoundField();
colIndex8.HeaderText = "Units";

if (UnitsDropDown.Text == "Imperial")
{
     colIndex8.DataField = "IUnits";
     colIndex8.SortExpression = "IUnits";
     GridView1.Columns.Add(colIndex8);
}
else
{
     colIndex8.DataField = "MUnits";
     colIndex8.SortExpression = "MUnits";
     GridView1.Columns.Add(colIndex8);
}
GridView1.DataBind();

这可以改变单位列中显示的单位(例如从“mm”到“ft”)。但是,我还需要更改显示长度的另一列的值。是否可以以某种方式编辑长度列中的值(例如乘以常数),然后将修改后的列数据绑定到gridview,而不必在数据库表中创建一个新列来存储这些信息?

我在想像:

DataColumn dc = GridView1.Columns[4];
foreach (cell c in dc)
{
    c *= 0.5;
}
GridView1.Columns.Add(dc);
GridView1.DataBind();

作为简单的伪代码,但这是正确的方法/这可能吗?

谢谢

4

1 回答 1

0

不要添加和删除列。只需隐藏您不想看到的列:

<asp:BoundField DataField="IUnits" Visible="<%# UnitsDropDown.Text == "Imperial" %>" />
<asp:BoundField DataField="MUnits" Visible="<%# UnitsDropDown.Text != "Imperial" %>" />

至于您的第二个问题,请使用 TemplateField:

<asp:TemplateField HeaderText="foo">
    <ItemTemplate>
        <asp:Label runat="server" Text='<%# ((int)Eval("foo")) * (UnitsDropDown.Text == "Imperial" ? 0.5 : 1) %>' />
    </ItemTemplate>
</asp:TemplateField>
于 2012-10-29T16:31:25.273 回答