【问题标题】:Editing the column of an objectdatasource before databind在数据绑定之前编辑对象数据源的列
【发布时间】:2012-10-29 16:21:58
【问题描述】:

目前我正在使用带有 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();

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

谢谢

【问题讨论】:

    标签: c# asp.net sql gridview objectdatasource


    【解决方案1】:

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

    <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>
    

    【讨论】:

    • 这个模板字段“foo”的原始数据来自哪里?此外,在尝试为模板字段运行示例时,我收到“服务器标记格式不正确”错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多