Repeaterのロー・データ・アイテムのカラム値の取得について

3948 ワード

Repeaterのロー・データ・アイテムのカラム値を取得する方法.高手飘过~~~
 
実は「Repeaterの各行のデータは1つのオブジェクトで、このオブジェクトがどんなタイプなのかは、バックグラウンドでバインドされたデータソースによって決まります.私たちは通常、テーブル(DataTable)をバインドします.このオブジェクトのタイプはDataRowViewタイプです.
 
フロントコードは次のとおりです.
 

【サイト 】

  • :<>
  • :<>
  • :<>
  • :<>
  • :<>
  • :<>
  • :<>
  • :<>
  • :<>
  • :<>
  • SIM :<>
  • IP:

 
 
バックグラウンドでバインドされているコードは次のとおりです.
 
if (!string.IsNullOrEmpty(stationId) && stationId != null)
            {
                StationInfoDAL stationInfo = new StationInfoDAL();
                this.rptStationDetailsInfo.DataSource = new DataTable();
                this.rptStationDetailsInfo.DataBind();
            }
 
 
 
バックグラウンドでフィールドの内容を取得するコードは次のとおりです.
 
 protected void rptStationDetailsInfo_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.Item)
            {
                if (((DataRowView)e.Item.DataItem)["RemoteIP"]==null||((DataRowView)e.Item.DataItem)["RemoteIP"].ToString()=="")
                {
                    Label label = (Label)e.Item.FindControl("lblIP");
                    label.Visible = true;
                }
            }
        }

 
ここで私が赤で表記した部分を見てください.実は(DataRowView)は集合で、ある列の値が必要で、インデックスで手に入れることができます.
 
また、下線で書いた部分に注意しましょう.ここでは後ろの判断を誤記する人が多いので、それはいけません.具体的にどんな原理か、自分でインターネットで見てみましょう.
 
上記の場合、Repeaterの各オブジェクトについて(DataRowView)タイプです.
しかし、バックグラウンドでデータソースをバインドするとき、テーブルをデータソースとしてRepeaterに渡すのではない場合もあります.DataSourceの.次のようになります.
 
if (!string.IsNullOrEmpty(stationId) && stationId != null)
            {
                StationInfoDAL stationInfo = new StationInfoDAL();
                this.rptStationDetailsInfo.DataSource = new List();
                this.rptStationDetailsInfo.DataBind();
            }

 
この場合、Repeaterの各オブジェクトタイプは、私たちが作成したタイプGroupです.
適切なフィールドコードを取得するには、次のようにします.
 
 if (e.Item.ItemType == ListItemType.Item||e.Item.ItemType == ListItemType.AlternatingItem)
            {
                if ((bool)((Model.Group)e.Item.DataItem).bitSwitchOn)
                {
                    Label label = (Label)e.Item.FindControl("lblSwitchOnInFact");
                    label.Visible = false;
                }
                if ((bool)((Model.Group)e.Item.DataItem).bitSwitchOff)
                {
                    Label label = (Label)e.Item.FindControl("lblSwitchOffInFact");
                    label.Visible = false;
                }

                Repeater temp = (Repeater)e.Item.FindControl("rptSwitchShiftPoints");
                temp.DataSource = autoRunShiftPts.GetEnabledSwitchPointsInfo(((Model.Group)e.Item.DataItem).autoRunId, ((Model.Group)e.Item.DataItem).groupId);
                temp.DataBind();
            }

赤いマークアップの場所は対応するフィールドの内容を取得することですが、テーブルの取得とは異なり、ここではオブジェクトのメンバーを取得することが理解できます.bitSwitchOnとbitSwitchOffは私が作成したModelです.Groupの下にある2つの属性メンバー