2010-11-24 54 views
0

幫助這是我轉發:需要與中繼

<asp:Repeater ID="myRepeater" OnItemCommand="myRepeater_ItemCommand" runat="server" OnItemDataBound="myRepeater_OnItemDataBound"> 
    <HeaderTemplate> 
     <table width="99%" border="0" cellpadding="0" cellspacing="0"> 
      <tr class="lgrey"> 
       <td>Default</td> 
      </tr> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <table> 
      <tr> 
       <td> 
        <asp:LinkButton ID="lnk1" Text="Make Default" CommandName="SetDefault" runat="server" Visible="True" CommandArgument='<%#Eval("UserID") %>' CausesValidation="false"></asp:LinkButton> 
        <asp:Label ID="label1" Text="Yes" runat="server" Visible="False"></asp:Label> 
       </td> 
      </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

我要的是,當用戶點擊任何 在中繼呈現列表中的「lnk1」鏈接按鈕, 鏈接應更換與標籤「LABEL1」 .. 即當用戶點擊「設爲默認值」鏈接,應使用「是」標籤

調用此方法obj.SetDefaultAddress();是好的設置在DB的默認地址.. 取代問題是顯示label1和lnk1的時候中繼器呈現...

發生了什麼是兩個「默認」LinkBut​​ton和「是」標籤顯示 在我的中繼器內的表的「默認」列下。

我想一些代碼,將在我的數據庫查詢「ISDEFAULT」值,並顯示「設爲默認」鏈接按鈕

和「YES」的標籤據此......也就是說,如果ISDEFAULT的在DB值爲TRUE則應該在中繼器中顯示「是」 否則「設爲默認值」

回答

2

您確定您的代碼片段在ItemCommand下的代碼正在執行嗎? 我只改變了SetDefault中的CommandName到aspx文件中的SetDefaultAddress以與代碼後面的代碼匹配,它工作。

+0

我糾正了......我輸入錯誤...命令名稱匹配..它將地址設置爲默認在DB! – Serenity 2010-11-24 04:58:41

+0

在您編輯的代碼中,您正在使用obj.IsDefault,您是否試圖在調試模式下檢查其值? – Waqas 2010-11-24 05:03:16

+0

調試器只顯示IsDefault的值爲false,這顯然就是爲什麼「Make Default」鏈接顯示在中繼器內的原因。下面的回答者說,probelm與Selected Index。我如何解決這個問題? Plz help..thnx – Serenity 2010-11-24 05:11:56

0

從哪裏開始?

我認爲是什麼導致你的問題是SelectedItemDefaultAddress沒有被映射到對方,所以當你按一下按鈕你要選擇的索引設置和OnItemDatabound事件顯示/隱藏你想要的,但是當網格從數據庫初始化時,SelectedItem沒有被設置。

我不知道你的數據源是什麼,並且顯然有更多的代碼比你發佈的代碼更多,但是如果你可以查看myRepeater_ItemDataBound處理程序中的e.Item.DataItem,你可以將當前項目設置爲選中時該地址是默認的(e.Item.ItemType... or use your "selectedIndex" counter

0

我可能會從標記本身做到這一點 - 這是假設您的數據源中的位/布爾類型的「IsDefault」列/屬性指示地址是默認值。因此,請使用以下標記:

... 
<tr> 
    <td> 
     <asp:LinkButton ID="lnk1" Text="Make Default" CommandName="SetDefault" runat="server" Visible='<%# !Eval("IsDefault") %>' CommandArgument='<%#Eval("UserID") %>' CausesValidation="false"></asp:LinkButton> 
     <asp:Label ID="label1" Text="Yes" runat="server" Visible='<%# !Eval("IsDefault") %>'></asp:Label> 
    </td> 
</tr> 
... 

您需要根據數據源中的屬性(使用標記或ItemDataBound事件)控制可見性。同樣,當單擊SetDefault鏈接時,您必須重新綁定中繼器新狀態或顯式切換可見性(如當前代碼所做的那樣)。

編輯: 如果數據綁定表達式不起作用,那麼你必須在ItemDataBound事件中做到這一點。我看到你已經嘗試過,但有一個錯誤 - bllUsers obj=new bllUsers();將始終將IsDefault設置爲false - 你需要使用數據項。例如,

protected void myRepeater_ItemDataBound(Object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      bllUsers obj = e.Item.DataItem as bllUsers; 
      ((Label)e.Item.FindControl("ldefault")).Visible = obj.isDefault; 
      ((Button)e.Item.FindControl("btnMakeDefault")).Visible = ! obj.isDefault; 
     } 
    }