我在DetailsView中有一个ListBox,每个都有一个不同的(Sql)DataSource:
<asp:DetailsView ID="dvwSomeDetailsView" DataSourceID="sdsSomeDetailsView" runat="server" ...
...
<asp:TemplateField HeaderText="SomeHeaderText">
<ItemTemplate>
<asp:ListBox ID="lstSomeListBox" runat="server" DataSourceID="sdsSomeListBox" DataTextField="SomeColumn" DataValueField="SomeOtherColumn" Rows='<%#Eval("NumberOfRows") %>' />
</ItemTemplate>
</asp:TemplateField>
....
</asp:DetailsView>
....
尝试访问列“NumberOfRows”现在似乎尝试从与DetailsView关联的SqlDataSource中读取它,因为抛出了异常:“DataBinding:System.Data.DataRowView不包含名为NumberOfRows的属性”。
使用从该ListBox的SqlDataSource返回的内容填充ListBox的项目不是问题,但如何从其他列访问数据(如果可能的话)?只需在Rows =“NumberOfRows”中输入列名称当然不起作用。
更新
澄清我真正想做的事情:我希望ListBox的“Rows”属性动态设置为项目数,即如果有六个项目,“Rows”应该设置为6,所以没有滚动是必要的,而不是空的空间在列表框中。
提前致谢。
-G。
答案 0 :(得分:0)
不确定这是否完全符合您的要求,但您可以尝试:
// Get the ListBox - I used the first row for sake of illustration
ListBox lb = (ListBox)dvwSomeDetailsView.Rows[0].FindControl("lstSomeListBox");
// Now you can access the ListItemCollection of the ListBox
string value = lb.Items[0].Value;
希望这至少会让你朝着正确的方向前进。