2013-07-10 63 views
1

我在ListView中有兩個按鈕。通過點擊第一個按鈕,我想更新ListView-Item。點擊第二個按鈕我想更新ListView-Item並重定向到不同的頁面。兩個按鈕都有一個屬性CommandName="Update"。我想用CommandArgument -Property和OnItemUpdated-Events解決我的問題,但我不知道如何在事件中獲得此Property的價值。兩個按鈕更新列表視圖中的一個項目

<asp:ObjectDataSource ID="ods" runat="server" SelectMethod="Select" UpdateMethod="Update"> 
    <SelectParameters> 
     <asp:Parameter ..... /> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:Parameters .... /> 
    </UpdateParameters> 
</asp:ObjectDataSource> 

<asp:ListView ID="lv" runat="server" DataSourceID="ods" DataKeyNames="ID" OnItemUpdated="lv_OnItemUpdated"> 
    <ItemTemplate>...</ItemTemplate> 
    <EditItemTemplate> 
     <asp:Button ID="btnUpdate" runat="server" CommandName="Update"/> 
     <asp:Button ID="btnUpdate2" runat="server" CommandName="Update"/> 
    </EditItemTemplate> 
</asp:ListView> 

而在代碼隱藏:

protected void lv_OnItemUpdated(object sender, ListViewUpdateEventArgs e) 
{ 
    ... 
} 

是否有可能在lv_OnItemUpdated決定用戶點擊了哪個按鈕?

回答

0

我不相信有一種方法來區分哪個控件發出的更新命令,因爲發件人本身就是ListView

一種解決方法是你給一個按鈕的CommandName「更新」,另「UpdateRedirect」。 「UpdateRedirect」按鈕將觸發ListView_ItemCommand事件,並從那裏您可以撥打ListView.UpdateItem,將更新邏輯保留在那裏,然後再重定向。

爲什麼你堅持使用OnItemUpdated事件?

+0

謝謝。這是工作! –

0

爲每個按鈕指定一個不同的名稱。在處理兩個按鈕點擊事件時,在您的代碼中使用相同的事件處理方法。然後檢查哪個按鈕叫做方法。

編輯:解決方法是使用javascript將單擊按鈕的名稱放到表單上的隱藏字段中,然後它轉到服務器端(使用客戶端腳本)。然後在你的Listview中,你可以檢查隱藏字段的值來查看哪個按鈕被點擊。

+0

我想要按鈕來觸發ListView的更新事件當我處理按鈕點擊事件更新 –

+0

因此,您希望頁面顯示ListView中的更改,然後重定向? – Winks

+0

顯示更改不是必需的,而是更新(寫入更新到數據庫)更新在處理OnClick事件時不起作用 –

0

那麼有2〜3種方式做的:一是CommandArgument爲:

<asp:Button id="Button1" 
    Text="Sort Ascending" 
    CommandName="Sort" 
    CommandArgument="Ascending" 
    OnCommand="CommandBtn_Click" 
    runat="server"/> 
<asp:Button id="Button2" 
    Text="Sort Descending" 
    CommandName="Sort" 
    CommandArgument="Descending" 
    OnCommand="CommandBtn_Click" 
    runat="server"/> 

,比在服務器端,你可以有:

void CommandBtn_Click(Object sender, CommandEventArgs e) 
{ 
    if(e.CommandName == "Sort") 
    //do you work and so on 
} 

,或者你可以投發件人如按鈕,把它的ID來看看,哪個按鈕被它:

((Button)sender)).ID 

,或者你可以得到按鈕的ID爲:

String ButtonID = Request["__EVENTTARGET"]; 

我希望它能幫助你解決你的問題。

所以你可以有這樣的:

protected void lv_OnItemUpdated(object sender, ListViewUpdateEventArgs e) 
{ 
    // either use e.CommandName 
    // or user ((Button)sender)).ID 
} 
+0

謝謝,但如果可能的話,我想使用OnItemUpdated-Event。 –

+0

我已經修改了我的答案,最後可以找到解決方案。 –

+0

CommandName是「更新」,發件人是ListView而不是按鈕。 –

0

您需要進入ItemCommand事件您ListView

protected void lstvw_ItemCommand(object sender, ListViewCommandEventArgs e) 
    { 
     switch (e.CommandName) 
     { 
      case "new": 
       try 
       { 
        //e.CommandArgument 
        //e.CommandSource 
        // do your stuff here 
       } 
       catch (Exception ex) 
       { 

       } 
       break; 

      default: 
       break; 
     } 
    } 
+0

謝謝,但如果可能的話,我想使用OnItemUpdated-Event。 –

+0

你要求解決方案,這是做這項工作,現在它的優先事項。我只是試圖給出一個解決方案。如果它標記爲答案。 –

0

好的,是的,itemcommand是你想要的: 更新或插入的生命週期觸發它們的本地事件和itemcommand事件。 itemCommand事件將發生在itemUpdating或itemInserting事件之前。 因此,您可以創建一個名爲「bSecondButtonClicked」的布爾變量,例如使用Commandname ='UPDATE「將命令參數添加到這兩個按鈕,可以在itemcommand事件點評估e.command參數,並設置布爾變量(或實現它)爲true然後,在itemupdating事件,觸發您的代碼基於bSecondButtonClicked

相關問題