2015-01-04 80 views
0

我試圖使用列索引獲取數據,而不是使用列名稱使用<%#Eval('foo')%>表達式或任何其他方式)在我的中繼器控制。 這裏是我的代碼:如何通過索引而不是通過asp:repeater中的列名獲取價值#Eval

頁:

<asp:Repeater ID="rptrHeatingNavien" runat="server"> 
    <ItemTemplate> 
     <li class="icon-font"><a href="/Products/?Id=<%#Eval('get-data-by-index[0]')%>><a><%#Eval('get-data-by-index[1]')%></a></li> 
    </ItemTemplate> 
    </asp:Repeater> 

後臺代碼:

string connectionString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString; 
SqlConnection sqlCon = new SqlConnection(connectionString); 
SqlDataAdapter sqlDa = new SqlDataAdapter("SELECT * FROM Products", sqlCon); 
DataSet ds = new DataSet(); 
sqlDa.Fill(ds); 
rptr.DataSource = dsSideMenu.Tables[0].Select("category = '1-1-1'"); 
rptr.DataBind(); 

這裏的問題是,由於某種原因(我會更樂意知道爲什麼) ,我不能使用列名作爲我綁定到我的中繼器控件的行(並且我仔細檢查了他們實際上是否有數據)。所以在我面前的唯一解決方案是讓它們在列中索引,我不知道我該怎麼做。任何解決方案?

+0

如何做你的代碼甚至編譯? 'sqlDaS.Fill(ds);'應該是'sqlDa.Fill(ds);' – prospector

+0

這是一個輸入錯誤:)。對不起! – roostaamir

回答

0

假設你結合SuperItem對象(SuperItem類型支持基於索引的訪問),你可以處理ItemDataBound事件的集合:

<asp:Repeater ID="rptrHeatingNavien" runat="server" OnItemDataBound="rptrHeatingNavien_ItemDataBound"> 
    <ItemTemplate> 
     <li class="icon-font"> 
      <asp:HyperLink runat="server" ID="productLink" /> 
    </ItemTemplate> 
</asp:Repeater> 

代碼隱藏:

protected void rptrHeatingNavien_ItemDataBound(object sender, EventArgs e) 
{ 
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     var item = (SuperItem) e.Item.DataItem; 
     var link = (HyperLink) e.Item.FindControl("productLink"); 
     link.NavigateUrl = string.Format("/Products/?Id={0}", item[0].ToString()); 
     link.Text = item[1].ToString(); 
    } 
} 
相關問題