DataValueField将值传递给转发器?

时间:2013-02-06 10:22:17

标签: asp.net repeater

因此,如果用户从dropDownList中选择一个值并单击该按钮,则ID将传递给后面的代码(这是我想要的位置) E.g。

<asp:DropDownList ID="DropDownList" runat="server" AppendDataBoundItems="true" DataTextField="Company_Name" DataValueField="id">
<asp:ListItem Text="---Select---" Value="0" />   
</asp:DropDownList>

因此dataValueField将传递DD中所选记录的“id”。

然而,在同一页面上,我使用转发器显示先前从下拉列表中选择的记录,在每条记录旁边我有一个“更改价格”按钮,我想在点击时执行任务,一切正常但我所需要的只是同一个'id'。 这是以类似的方式完成的吗? E.g

<asp:Repeater ID="repeaterShowName" runat="server">             
                <HeaderTemplate>                   
                        <tr>

                            <th>
                                <asp:Label ID="SubConName" Text="Current SubContractors" runat="server"></asp:Label>                               
                            </th>
                        </tr>                   
                </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <td>
                            <asp:Label ID="SubCon" Text='<%# Bind ("Company_Name")  %>' runat="server"></asp:Label>  
                        </td> 
                        <td>                                     
                            <asp:LinkButton ID="AddNewBOQLink" runat="server"  OnClick="EditPricesForSubContractor" CssClass="bottomhyperlink">Change Prices</asp:LinkButton>
                        </td>

                    </tr>
                </ItemTemplate>
            </asp:Repeater>

//所以我在链接按钮中添加DataValueField =“id”,所以当用户选择名称旁边的超链接时,它会自动拥有'id?

1 个答案:

答案 0 :(得分:2)

您应该使用LinkBut​​ton的CommandArgument属性将id传递给处理点击的方法。

所以你的LinkButton现在看起来像这样:

<asp:LinkButton ID="AddNewBOQLink" runat="server" CommandArgument='<%# Bind("id")%>'  CssClass="bottomhyperlink">Change Prices</asp:LinkButton>

并且您希望将以下属性添加到R​​epeater:

<asp:Repeater .... OnItemCommand="repeater_Command" ...

处理命令事件的方法将如下所示

void repeater_Command(Object Sender, RepeaterCommandEventArgs e) {        
   //retrieve the id like so
   int id = (int)e.CommandArgument;
}

另请注意,我从LinkBut​​ton中删除了OnClick属性。当您通过转发器的OnItemCommand方法处理点击时,不需要它。

此外,您可能需要考虑在LinkBut​​ton中添加CommandName属性。这用于标识您要执行的命令。目前,您只有一个命令:更改价格。但是将来你可能想要添加一个带有不同命令的附加按钮。

为此,请将以下属性添加到LinkBut​​ton:

<asp:LinkButton ... CommandName="ChangePrice" ...

并修改repeater_Command方法以处理CommandName。像这样:

void repeater_Command(Object Sender, RepeaterCommandEventArgs e) {    
   switch(e.CommandName)
   {
      case "ChangePrice":    
         //retrieve the id like so
         int id = (int)e.CommandArgument;
         break;
   }
}