0

我目前有两个问题阻止我正确完成两个项目。我将它们都放在这里,因为我相信它们与 asp.net 页面生命周期有关,但我找不到绕过它们的方法。

首先,我有一个 DropDownList,我必须在代码隐藏中对其进行排序。它只包含文本,所以我应该能够使用页面加载中调用的以下方法来做到这一点:

        Dim alist As ArrayList = New ArrayList

        对于每个 litem 作为 ltEsittelyDropDownList.Items 中的 ListItem
            alist.Add(litem.Text)
        下一个

        alist.Sort()

        将 uusiDDList 调暗为新的 DropDownList

        For i As Integer = 0 To alist.Count - 1
            将 litem 作为新的 ListItem
            litem.Text = alist(i).ToString
            litem.Value = alist(i).ToString
            uusiDDList.Items.Add(litem)

            ' Response.Write(alist(i).ToString)
        下一个

        ltEsittelyDropDownList = uusiDDList
        ltEsittelyDropDownList.DataBind()

如您所见,其中有一个注释 response.write ,它显示列表实际上已排序。那么为什么,当我加载页面时,我看不到任何效果?

另一个比较关键和困难的问题如下:

在aspx 页面中,我将SQL Server 2005 数据源绑定到gridview。在代码隐藏中,我抓住了 RowDataBound 事件,在该事件中我处理了 gridviews 单元格内的一些链接和属性。但是我不能让它在第一个页面加载时工作,只有在第一次额外的回发之后。

那么,有什么办法呢?并感谢前面的所有建议!

4

1 回答 1

1

Your first problem is calling DataBind on a control you have filled manually. You likely have a DataSource specified in the control declaration, which is being used when DataBind is called. You can simplify the code by just adding the list items to the original control:

For i As Integer = 0 To alist.Count - 1
    ltEsittelyDropDownList.Items.Add(New ListItem(alist(i).ToString())
Next

Alternatively, as you have a collection already, you can just bind it to the control:

ltEsittelyDropDownList.DataSource = alist
ltEsittelyDropDownList.DataBind()

For your second problem, some example code would help - specifically, where and how the control is databound and the code in RowDataBound.

于 2009-09-25T22:45:26.947 回答