2012-05-06 4 views
4

イム:年が空の場合(itemdataboundイベント経由)リピータの行の値を変更しますか?私のリピータ内の値に変更しようとして

を - 設定値をblabla

私のリピーター:

<ItemTemplate> 
       <tr > 
        <td > 
         <%#Eval("year") %> 
        </td> 

私のC#コード:

void RPT_Bordereaux_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      if (string.IsNullOrEmpty(((DataRowView)e.Item.DataItem)["year"].ToString())) 
      { 
       (((DataRowView)e.Item.DataItem)["year"]) = "blabla"; // ??????? 

      } 
     } 

リピーターでは変更されますが表示されません。 (古い値が表示されます)。サーバおよび「findControl」に - -

一つの解決策は、itemTemplateserver control又はliteral(RUNATサーバ)を追加することであり、その値を変更します。

他の解決方法はjQueryです。空の最後のTDを検索します。

けど - 私の質問:

サーバ側ソリューションがありますか()?

答えて

6

あなたはこのような何か試すことができます:.aspxの中

リピータ:

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
    <table> 
    <tr> 
      <td> <%# GetText(Container.DataItem) %></td> 
    </tr> 

    </table> 
    </ItemTemplate> 
</asp:Repeater> 

は.cs

protected static string GetText(object dataItem) 
{ 
    string year = Convert.ToString(DataBinder.Eval(dataItem, "year")); 
    if (!string.IsNullOrEmpty(year)) 
    { 
     return year; 
    } 
    else 
    { 
     return "blahblah"; 
    } 

} 

GetText方法では、あなたがでできるようチェックすることができますが文字列を返します。

+0

愚かな動作するはずです - 私はあまりにに取り付けたと思いますdatarowviewクラス... –

+0

ここを見てください:http://stackoverflow.com/questions/9820464/got-anyway-i-set-class-inside-repeater-datarow-find-by-data-id-when-do -postback。あなたが欲しいものと同じもの – Jigs

+0

それは同じではありません - 彼はただの設定を読んでいません。 –

0

コントロールがバインドされる前に発生し、コントロールがバインドされた後に発生しないitemcreatedイベントを使用できます。最初のリンクでの例:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemcreated.aspx

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater_events.aspx

Repeaterコントロール内の項目がデータバインドされた後、それがページにレンダリングされる前にItemDataBoundが発生します。

1

HTMLファイル

<asp:Repeater ID="RPT_Bordereaux" runat="server"> 
    <ItemTemplate> 
    <table> 
    <tr> 
      <td> <%# GetValue(Container.DataItem) %></td> 
    </tr> 

    </table> 
    </ItemTemplate> 
</asp:Repeater> 

.CS CODE

protected void RPT_Bordereaux_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
    } 
} 


protected static string GetValue(object dataItem) 
{ 
    string year = Convert.ToString(DataBinder.Eval(dataItem, "year")); 
    if (!string.IsNullOrEmpty(year)) 
    { 
     return Convert.ToString(year); 
    } 
    else 
      { 
       return "blahbla"; 
      } 

     } 

これは....私はそれについてどのように考えるかdidntの、私

関連する問題