1

次のコードを使用して、グリッド ビューの行から個人の情報をリストに保存しています。

public class PlayerInfo
{
    public string FirstName { get; set; }
    public string Email { get; set; }
    public string DaysLeft { get; set; }
}


protected void btn_Click(object sender, EventArgs e)
{
    List<PersonInfo> person_list = new List<PersonInfo>();

          foreach (GridViewRow row in my_gridview.Rows)
        {
            CheckBox cb = (CheckBox)(row.Cells[2].FindControl("CheckBox"));
            if (cb.Checked)
            {
                person_list.Add(new PlayerInfo() {FirstName=row.Cells[0].Text,Email=row.Cells[2].Text,DaysLeft=row.Cells[5].Text});
            }
            else
            {

            }
        }

etc etc..

}

したがって、person_list[0] を出力しようとすると、リストの各ポイントに 3 つの項目が関連付けられているため、これは機能しません。したがって、リストの位置 0 には、名前、電子メール、残り日数が含まれます。Visual Studio でデバッグすると、アイテムが適切に保存されていることがわかります。

このリストから各アイテムを個別に取得するにはどうすればよいですか? たとえば、値をループ内の変数に設定できるため、メールアドレスはメール変数に割り当てられ、名前は別の変数に割り当てられますか? 私は通常の配列しか扱ったことがなく、これまで階層リストに出くわしたことはありません。

前もって感謝します。

4

4 に答える 4

3

このように for を使用して繰り返します

for(int i =0; i <person_list.Count; i++)
{
  string name =  person_list[i].FirstName;
  string email =  person_list[i].Email;
  string daysLeft =  person_list[i].DaysLeft;
}
于 2012-07-29T16:57:06.750 に答える
0

まず、リスト変数はローカルであるため、クラス外でアクセスする場合は、クラス レベルで宣言する必要があります。

次にPersonInfo、リストにオブジェクトを追加すると、リストPersonInfoから抜け出します。

反復に関する限り、どのループでも実行できます。

例:

foreach(PersonInfo pInfo in person_list)
{
  // your code
} 
于 2012-07-29T16:57:52.067 に答える
0

リストから値を取得するには、いくつかの方法があります。

for または foreach を使用して反復できます。

for (var i=0; i<person_list.Count; i++) {
    var email=person_list[i].Email;
}

foreach(var person in person_list) {
    var email=person.Email;
}

または、インデックスを使用して個々のメンバーにアクセスできます。

var person=person_list[1];
if (person!=null) {
    var email=person.Email;
}

または、Linq を使用してリストをクエリできます。

var person=person_list.FirstOrDefault(p=>p.FirstName=="Jack");
if (person!=null) {
    var email=person.Email; 
}

また、GridViewRow の項目にアクセスするには、GridViewRow.DataItem を使用できます。

foreach (GridViewRow row in my_gridview.Rows)
{
    var cb = (CheckBox)(row.Cells[2].FindControl("CheckBox"));
    if (cb.Checked)
    {
        person_list.Add(row.DataItem as PlayerInfo);
    }
 }
于 2012-07-29T17:00:01.543 に答える
0

Listswithを使用する美しい方法は、カスタム リストのプロパティの名前にGridViews設定し、それを DataSource として使用することです。DataPropertyNames

my_gridview.DataSource = person_list;

my_gridview.AutoGenerateColumns = false;リスト内のプロパティに基づいて列を自動的に生成する場合を除き、忘れずに設定してください。

于 2012-07-29T17:01:50.037 に答える