0

GridViewフッターのラベルに「total」という名前の列の値を表示したい。

「合計」列の値はすべての行で同じであるため、その列にいる限り、どのセルを選択してもかまいません。

列「total」にtemplate-fieldを使用しており、visibility=falseにすることで非表示にしています。だから私が欲しいのは、totalという名前の列の値をグリッドビュー内のラベルに表示したいということです

これが私が試したコードサンプルですが、エラーが発生します:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
int total;
        if (e.Row.RowType == DataControlRowType.DataRow) 
        { 
            total = Convert.ToInt32(((DataRowView)e.Row.DataItem)["total"].ToString()); 
        } 
        if (e.Row.RowType == DataControlRowType.Footer) 
        { 
            Label lblamount7 = (Label)e.Row.FindControl("Label27"); 
            lblamount7.Text =total.ToString(); // use of unassigned local variable 'total'
        }
    }

これは非表示の列のaspxです'>'>

4

2 に答える 2

1

列を非表示にするには、GridView の Template-Field で Hiddeneeild を取得します。構文は次のようになります

<asp:TemplateField>
<ItemTemplate>
 <asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("Total") %>'/>


                        </ItemTemplate>
                        </asp:TemplateField> 

合計を計算して GridView のフッターに表示するには、次のようにします

int total = 0;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType==DataControlRowType.DataRow)
{
total += Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "Total"));
}
if(e.Row.RowType==DataControlRowType.Footer)
{
Label lblamount7 = (Label)e.Row.FindControl("lblTotal");
lblamount7.Text = total.ToString();
}
}

それは確かにうまくいくでしょう。頑張って、うまくいったらコメントしてください。

于 2013-01-18T04:59:05.570 に答える
0

DataRowView キャストの周りに括弧が必要だと思います -- DataItem["total"] は存在しません:

これを変える:

total = Convert.ToInt32((DataRowView)e.Row.DataItem["total"].ToString());

total = Convert.ToInt32(((DataRowView)e.Row.DataItem)["total"].ToString());

--編集

RowDataBound プロシージャの外で total を定義し、それを 0 に初期化する必要があります。また、「+=」の使用に注意してください。各列から現在の合計が必要であると仮定します。そうでない場合は、データ行の最後の合計を取得する「=」に戻してください。

private int total = 0;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
        total += Convert.ToInt32(((DataRowView)e.Row.DataItem)["total"].ToString()); 
    } 
    if (e.Row.RowType == DataControlRowType.Footer) 
    { 
        Label lblamount7 = (Label)e.Row.FindControl("Label27"); 
        lblamount7.Text =total.ToString(); 
    }
}

幸運を。

于 2013-01-18T04:49:58.303 に答える