0

GridView現在、オブジェクトをパラメーターとして受け入れるメソッドはほとんどなく、GridViewオブジェクト内の値にアクセスして計算を実行しています。

私の質問は、これが良い習慣であるかどうかです。結果の表示を変更する必要がある場合 (つまり、GridView最初は 10 個のセルではなく 9 個のセルの結果が表示される場合)、それを使用するすべてのメソッドを変更する必要があることに気付きました。そうしないと、ArrayIndexOutOfBoundエラーが発生する危険があります。

public static string checkCount(GridView gr)
{
     //need to change the cell index if the sql to get the gridview is changed
     string name = gr.Rows[b].Cells[9].Text.ToUpper(); 
}

これについて何か考えはありますか?

ありがとう

編集
SQLの結果をオブジェクトのリストにマップするメソッドを用意したほうがよいでしょうか。オブジェクト自体はデータ行の表現です。このように、列を削除しても、マッピング方法自体を処理する必要があるだけで、他の方法は標準どおりに機能するはずです。

例:

public class Profile{
    string name {get;set;}
    string icNo {get;set;}
}

public list getProfileList(){
    //run some query here and loop the result
    //while looping
    profile = new Profile(name=/*the name result*/, icNo=/*icNo from result*/ );
    //return the list
}

ページ読み込み

List profiles = getProfileList();
gv.DataSource = profiles;
gv.DataBind();


public string calculationMethod(List profiles){
    //when in need of the result, just get the object from profiles and process
}
4

2 に答える 2

1

オブジェクトをパラメーターとして使用し、GridView オブジェクト内の値にアクセスして計算を実行しています

値はどこから来るのか? データ/ビジネスオブジェクトまたはこの特定の計算のみを担当するヘルパーオブジェクトで直接計算を実行することをお勧めします。次に、BOなどの代わりに、このヘルパーオブジェクトから結果ビューを動的に作成する別の関数を作成できます。

元の 10 個のセルではなく、9 個のセルの結果が得られます

これがまさに、計算のためにセルを直接操作してはならない理由です。本当にそれを行う必要がある場合は、計算用のインデックスを見つける別の方法を探す必要があります。それらは実際の結果オブジェクトに依存する可能性があります。(値は特定のデータ型でも存在できます。視覚化とユーザー入力の場合のみ、文字列などに変換する必要があります)

一般に、この問題を解決するには、何が必要かを明確に分析する必要があります。次のようなものを保管してください。

また、アプリケーションに n 層モデルを使用することを考えるかもしれません

于 2012-09-10T09:37:53.560 に答える
0

に変換<asp:BoundField>::<asp:TemplateField>

<asp:TemplateField HeaderText="name" SortExpression="DateCreated">
      <ItemTemplate>
             <asp:label id="LbMyName" text="" runat="server">
      </ItemTemplate>
</asp:TemplateField>

これで、コードビハインドから呼び出すことができます。

Label lb = GridView1.Rows[i].FindControl("LbMyName");
于 2012-09-10T21:40:58.453 に答える