如何从DetailsView中的ListBox中的SqlDataSource访问访问字段?

时间:2011-07-26 07:12:48

标签: asp.net listbox sqldatasource detailsview

我在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。

1 个答案:

答案 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;

希望这至少会让你朝着正确的方向前进。