0

現在、オブジェクトデータソースを持つグリッドビューを使用して、製品情報のテーブルを表示しています。インペリアル単位とメートル単位の間で表示を切り替えるドロップダウン リストもあります。2 つを切り替えるには、誰かがドロップダウン リストの選択を変更するたびに、次のように古い単位列を削除し、選択に基づいて新しい列を挿入します。

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" へ)。ただし、長さを表示する別の列の値も変更する必要があります。この情報を格納するためにデータベース テーブルに新しい列を作成することなく、長さ列の値を何らかの方法で編集し (たとえば、定数を掛けて)、変更された列をグリッドビューにデータバインドすることは可能ですか?

私は次のようなものを想像しています:

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" %>" />

2 番目の質問については、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 に答える