2012-09-06 129 views
2

我正在使用中繼器控件創建一個只有幾行和幾列的表格。在Repeater_ItemCommand上,我想在後面的代碼中選擇單擊的行並將其存儲在會話中。我該怎麼做呢 ?如何從代碼中的中繼器控制中獲取全行?

當我點擊該行時,我的e.Item.DataItem將變爲NULL。我正在使用<%#DataBinder.Eval(Container.DataItem,「FILE_NAME」)%>綁定我的值在asp.net

我不能使用LINQ。

感謝 韋達

回答

0

從我瞭解直放站,它不應該像使用。爲什麼不使用GridView和TemplateField?

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"     
      DataKeyNames="KeyColumnName" 
      DataSourceID="SqlDataSource1"> 
      <Columns> 
       <asp:TemplateField> 
        ...Same template as in repater... 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
+0

我很想,但它從我hand..I的必須使用中繼器 – Zeus

+2

@伊萬:你爲什麼說中繼器「不應該這樣使用」? –

+0

@Shai Cohen:從我讀過的內容來看,它用於數據呈現而不是數據操作。 MSDN似乎同意:「Repeater控件沒有內置選擇功能或編輯支持」(http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.repeater(v = vs.100).aspx) –

0

您可以使用按鈕'/ LinkBut​​tons'/ etc。 CommandArgument字段。

<table> 
    <asp:Repeater ID="someRepeater" OnItemCommand="someRepeater_ItemCommand" runat="server"> 
     <HeaderTemplate> 
      <tr><th> 
       File Name Header 
      </th></tr>          
     </HeaderTemplate> 
     <ItemTemplate> 
      <tr><td> 
       <asp:LinkButton Text="File Name Item" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "FILE_NAME")%>' Style="display: block" runat="server" /> 
      </td></tr> 
     </ItemTemplate> 
    </asp:Repeater> 
</table> 

在後面的代碼:

protected void someRepeater_ItemCommand(object Sender, RepeaterCommandEventArgs e) 
{ 
    Session["FILE_NAME"] = e.CommandArgument; //Here you have your FILE_NAME 
} 

這是當然的,一些實施例的代碼。

+0

我想選擇整個行,我沒有使用服務器控件。在TD中顯示文本。 – Zeus

+1

據我所知'Repeater.ItemCommand'事件_Occurs當一個**按鈕**在Repeater控件中被點擊時._你可以在每個'​​'內使用帶有CSS樣式'display:block'的'LinkBut​​ton'參數和Text屬性。 –

2

這裏是中繼

<asp:Repeater ID="Repeater1" runat="server" 
     onitemcommand="Repeater1_ItemCommand"> 
     <HeaderTemplate> 
      <ul> 
     </HeaderTemplate> 
     <ItemTemplate> 
     <li> 
      <asp:LinkButton ID="btnDeleteComment" runat="server" Text="Delete" CommandName="DeleteComment" CommandArgument=<%#Eval("myId") %>></asp:LinkButton> 
      <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "FileName")%>'></asp:Label> 
      </li> 
     </ItemTemplate> 
     <FooterTemplate> 
     </ul> 
     </FooterTemplate> 
    </asp:Repeater> 

這裏的代碼的代碼後面的代碼

public partial class _Default : System.Web.UI.Page 
    { 
     public class myObject 
     { 
      public string FileName { get; set; } 
      public int myId { get; set; } 
     } 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      List<myObject> myList = new List<myObject>(); 
      myList.Add(new myObject {myId = 1, FileName = "one" }); 
      myList.Add(new myObject { myId = 2, FileName = "two" }); 
      myList.Add(new myObject { myId = 3, FileName = "three" }); 

      Repeater1.DataSource = myList; 
      Repeater1.DataBind(); 
     } 

     protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) 
     { 
      Label item = (Label)e.Item.FindControl("label1"); 

     } 
    } 
+0

Label item =(Label)e.Item.FindControl(「label1」);爲我工作。它節省了我很多時間。 @atbebtg謝謝你的回答。 :) – SarangK

相關問題