ListView 的 ItemCommand 事件中如何找到是第幾列執行的

我有個 ListView 並寫了一個 ItemCommand 事件,這個事件是自訂的,但我希望執行完自訂的 Command 後可以修改 ListView 的 SelectedIndex 屬性,讓該列直接被選中,不過我為了找到到底是哪一列執行這個 Command 花了我一個小時才解出來,因為網路上也很難找到相關的資料(主要是不知道應該怎麼查),MSDN 也沒有相關範例。

我最後的解決方式是這樣,如下程式碼:

protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) {
    if (e.Item.ItemType == ListViewItemType.DataItem) {
        // do something
        ListViewDataItem thisDataItem = 
            (ListViewDataItem)((Button)e.CommandSource).NamingContainer;
        for (int i = 0; i < ListView1.Items.Count; i++) {
            if (ListView1.Items[i].Equals(thisDataItem)) {
                ListView1.SelectedIndex = i; ListView1.DataBind(); break;
            }
        }
    }
}

2008-05-21 更新:

因為 Joe 提示了一個更棒的方法,就是將 ItemCommand 事件中的 e.Item 轉型成 ListViewDataItem 型別,然後把 DisplayIndex 屬性取出即可,最後的寫法如下(只剩下兩行):

ListView1.SelectedIndex = ((ListViewDataItem)e.Item).DisplayIndex;
ListView1.DataBind();

這樣的一個念頭曾經在我腦海中出現過,不過我想說在之前常用的 GridView 有個 GridViewRow 屬性,但 GridViewRow 是無法轉成 DataItem 的,所以連帶的想說 ListView 應該是沒辦法,但沒想到 ListViewItem 物件(e.Item) 竟然可以轉型成 ListViewDataItem 來用。這又再次證明以前學的知識到現在不一定有用,保持大腦的活性真的很重要,不斷的求新求變才是王道。

另外,我也找到了 MSDN 上相關的文章範例:ListViewCommandEventArgs.Item 屬性

  

此文章由 will 發表於 2008/5/20 上午 11:43:16

永久連結 | 評論 (4) | 此文章的RSSRSS comment feed |

分類: ASP.NET

標籤: , ,

收藏:

相關文章

評論

五月 20. 2008 19:40

Ammon

我沒用過ListView
不過可以在Binding時偷藏 index 到 CommandArgument 或是 visibile=false 的 Label 等等..
比起原來的方法少了迴圈, 但卻增加了 client 的傳輸量

Ammon tw

五月 20. 2008 20:31

will

CommandArgument 我已經用掉了。

不過從 TemplateField 中好像也沒有方便抓到 RowIndex 的方式!

will tw

五月 21. 2008 00:48

Joe

這樣如何呢?

protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
ListView1.SelectedIndex = ((ListViewDataItem)e.Item).DataItemIndex;
ListView1.DataBind();
}
}

Joe tw

五月 21. 2008 10:06

will

可以耶,好樣的!感恩喔~ ^_^

不過有點小問題,我剛測試了一下,應該要用 ((ListViewDataItem)e.Item).DisplayIndex 才正確,否則在分頁的環境下會無法選中正確的位置!

will tw

新增評論


(將顯示您的Gravatar圖示)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



線上預覽

一月 6. 2009 20:58