【问题标题】:select multiple items from listview and do action on button click从列表视图中选择多个项目并在按钮单击时执行操作
【发布时间】:2016-08-09 15:05:04
【问题描述】:

我有一个列表视图,我想从列表视图中选择多个项目,单击按钮需要对所选行执行一些操作。但我无法从列表视图中获取值项,下面是我尝试过的代码,我在哪里做错了?

标记

<asp:ListView ID="LvOrders" runat="server" 
    GroupPlaceholderID="groupPlaceHolder1" 
    ItemPlaceholderID="itemPlaceHolder1"
    OnPagePropertiesChanging="OnPagePropertiesChanging">
    <LayoutTemplate>
        <table id="product-master" class="table table-bordered table-striped">
            <tr>
                <th><asp:CheckBox ID="ChkBox" runat="server" /></th>
                <th>Order #</th>
                <th>User Name</th>
                <th>Purchase Date</th>
                <th>Amount</th>
            </tr>
            <asp:PlaceHolder runat="server" ID="groupPlaceHolder1"></asp:PlaceHolder>
            <tr>
                <td colspan="3">

                    <asp:DataPager ID="DataPager1" runat="server" 
                        class="btn-group btn-group-sm" 
                        PagedControlID="LvOrders" 
                        PageSize="10">
                        <Fields>
                            <asp:NextPreviousPagerField PreviousPageText="<" 
                                FirstPageText="|<" 
                                ShowPreviousPageButton="true"
                                ShowFirstPageButton="true" 
                                ShowNextPageButton="false" 
                                ShowLastPageButton="false"
                                ButtonCssClass="btn btn-default" 
                                RenderNonBreakingSpacesBetweenControls="false" 
                                RenderDisabledButtonsAsLabels="false" />
                            <asp:NumericPagerField ButtonType="Link" 
                                CurrentPageLabelCssClass="btn btn-primary disabled" 
                                RenderNonBreakingSpacesBetweenControls="false"
                                NumericButtonCssClass="btn btn-default" 
                                ButtonCount="10" 
                                NextPageText="..." 
                                NextPreviousButtonCssClass="btn btn-default" />
                            <asp:NextPreviousPagerField NextPageText=">" 
                                LastPageText=">|" 
                                ShowNextPageButton="true"
                                ShowLastPageButton="true" 
                                ShowPreviousPageButton="false" 
                                ShowFirstPageButton="false"
                                ButtonCssClass="btn btn-default" 
                                RenderNonBreakingSpacesBetweenControls="false" 
                                RenderDisabledButtonsAsLabels="false" />
                        </Fields>
                    </asp:DataPager>
                </td>
            </tr>
        </table>
    </LayoutTemplate>
    <GroupTemplate>
        <tr>
            <asp:PlaceHolder runat="server" ID="itemPlaceHolder1">
            </asp:PlaceHolder>
        </tr>
    </GroupTemplate>
    <ItemTemplate>
        <td><asp:CheckBox ID="ChkBx" runat="server" /></td>
        <td><%# Eval("OrderNo") %></td>
        <td><%# Eval("Name") %></td>
        <td><%# Eval("Created") %></td>
        <td><%# Eval("Amount") %></td>
    </ItemTemplate>
</asp:ListView>

C# 代码

string res;
protected void btnAssign_Click(object sender, EventArgs e)
{
    foreach (ListViewItem row in LvOrders.Items)
    {
        CheckBox cb = (CheckBox)row.FindControl("ChkBox");
        if (cb != null)
        {
            if (cb.Checked == true)
            {
                ListViewItem item = LvOrders.Items[LvOrders.SelectedIndex];
                String c = item.FindControl("OrderNo").ToString();
                res = res + "" + c;// printing selected OrderNo
            }
        }
    }
}

【问题讨论】:

    标签: c# asp.net listview


    【解决方案1】:

    您必须像这样分配一个 ID。

    <ItemTemplate>
        <td>
            <asp:CheckBox ID="ChkBx" runat="server" />
        </td>
        <td>
            <asp:label ID="OrderNo" runat="server" 
                Text='<%# Eval("OrderNo") %>'>
            </asp:label>
        </td>
        <td><%# Eval("Name") %></td>
        <td><%# Eval("Created") %></td>
        <td><%# Eval("Amount") %></td>
    </ItemTemplate>
    

    现在在代码隐藏中

    CheckBox cb = (CheckBox)row.FindControl("ChkBox");
    if (cb != null)
    {
        if (cb.Checked)
        {
            var OrderNoLabel = (Label)row.FindControl("OrderNo") ;
            res = res + "" + OrderNoLabel.Text;// printing selected OrderNo
        }
    }
    

    【讨论】:

    • 谢谢Naveen,但是当我调试代码时,即使我选中了复选框,它总是显示为空。
    • 显示为空或未选中?您必须在Page_Load 中绑定asp:ListView。如果是这样,将asp:ListView 绑定到!IsPostBack
    • 我使用了两个复选框,一个在表格的标题中,另一个在项目模板中,并在标题复选框中寻找选定的值,即愚蠢的高度。 :(
    【解决方案2】:

    你写过item.FindControl("OrderNo").ToString(); 但是在你的 ASPX 页面中你已经定义了&lt;td&gt;&lt;%# Eval("OrderNo") %&gt;&lt;/td&gt; 所以,你还没有定义任何控件,仍然想找到控件。因此这会导致错误,如果您想找到控件及其值,可以选择使用标签。

    PS:如果有帮助,标记为答案

    【讨论】:

    • 很好的答案 Gaurav。请在以后用一些代码详细说明答案+1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多