【问题标题】:Asp.net/C# Get repeater row data through checkboxAsp.net/C#通过checkbox获取repeater行数据
【发布时间】:2016-12-06 16:23:19
【问题描述】:

您好,我有一个中继器,它会将数据显示为表格,每行都有复选框,所以我想在单击按钮时显示选中的行数据。

.aspx代码:

  <asp:Repeater ID="rptItems" runat="server">
        <HeaderTemplate>
            <table class="table table-bordered table-hover table-responsive table-striped table-condensed">
                <tr>
                    <th> </th>
                    <th>Goods Desc</th>
                    <th>Balance Units</th>
                    <th>Exit Units</th>
                </tr>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td><asp:CheckBox ID="cbItem" runat="server" /></td>                    
                <td><%#Eval("ItemDesc") %></td>
                <td><%#Eval("InvoicBalanceUnits") %></td>
                <td><asp:TextBox ID="txtExitUnits" runat="server" ></asp:TextBox>
                    <asp:RegularExpressionValidator ID="revUnits" runat="server" Display="Dynamic" ControlToValidate="txtExitUnits" ValidationExpression="^\d+$" ErrorMessage="Please, insert a number." CssClass="text-danger"></asp:RegularExpressionValidator>
                    <asp:RequiredFieldValidator ID="rfvUnits" runat="server" Display="Dynamic" ControlToValidate="txtExitUnits" ErrorMessage="Insert number of units." CssClass="text-danger"></asp:RequiredFieldValidator>
                </td>      
            </tr>             
        </ItemTemplate>
        <FooterTemplate>
              </table>   
        </FooterTemplate>
    </asp:Repeater>

后面的代码:

protected void btnExit_Click(object sender, EventArgs e)
{    
        List<RepeaterItem> selectedItems = rptItems.Items.Cast<RepeaterItem>().Where(x => ((CheckBox)x.FindControl("cbItem")).Checked).ToList();

        Repeater1.DataSource = selectedItems;
        Repeater1.DataBind();
}

Repeater1 将包含通过 :selectedItems 选择的数据 这是中继器1

 <asp:Repeater ID="Repeater1" runat="server">
    <HeaderTemplate>
        <table class="table table-bordered table-hover table-responsive table-striped table-condensed">
            <tr>                    
                <th>Goods Desc</th>
                <th>Balance Units</th>                    
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>                
            <td><%#Eval("ItemDesc") %></td>
            <td><%#Eval("InvoicBalanceUnits") %></td>         
        </tr>         
    </ItemTemplate>
    <FooterTemplate>
          </table>   
    </FooterTemplate>
</asp:Repeater>

当我运行代码时,它给了我一个错误,“ItemDesc”在repeater1 中不存在,有什么问题吗?

【问题讨论】:

  • @Phill 这有什么问题,还是有其他解决方案?
  • @Phill 所以应该删除所有现有的 Web 窗体项目?搞笑评论
  • 您无法将 List 绑定到 Repeater1,因为您正在尝试这样做。 RepeaterItem 类没有 ItemDesc 属性。在按钮上单击创建与 rptItems 数据源相同类型的集合,然后它将起作用。
  • 如何在中继器中指定选中的复选框行:rptItems @j.v.

标签: c# jquery asp.net repeater


【解决方案1】:

参考this解决:

 DataTable checkedData = new DataTable();
    checkedData.Columns.AddRange(new DataColumn[6] { new DataColumn("CampCode"), new DataColumn("BalUnits", typeof(decimal)), new DataColumn("ExitUni",typeof(decimal)), new DataColumn("itemNum"), new DataColumn("UOM"), new DataColumn("WT", typeof(decimal)) });
    foreach (RepeaterItem item in rptItems.Items)
    {
        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
        {
            CheckBox checkBoxInRepeater = item.FindControl("cbItem") as CheckBox;

            if (checkBoxInRepeater.Checked)
            {
                DataRow dr = checkedData.NewRow();
                Label lblCampCode = (Label)item.FindControl("lblCampCode");
                Label lblBalUnits = (Label)item.FindControl("lblBalUnits");
                TextBox txtExitUnits = (TextBox)item.FindControl("txtExitUnits");
                Label lblItemNo = (Label)item.FindControl("lblItemNo");
                Label lblUom = (Label)item.FindControl("lblUom");
                Label lblWT =  (Label)item.FindControl("lblWt");
                Label lblcode = (Label)item.FindControl("lblCode");
                HiddenField hfcode = (HiddenField)item.FindControl("hfCustomerId");

                string BalUnits = lblBalUnits.Text;
                string ExitUni = txtExitUnits.Text;

                var exitUni = decimal.Parse(txtExitUnits.Text);
                var balUni = decimal.Parse(BalUnits);



                if (exitUni > balUni)
                {
                  string myStringVariable = "Exit balance is larger than balance units!!";
                  ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + myStringVariable + "');", true);
                }
                else
                { 

                    dr["CampCode"] = lblCampCode.Text;
                    dr["BalUnits"] = lblBalUnits.Text;
                    dr["itemNum"] =  lblItemNo.Text;
                    dr["UOM"] = lblUom.Text;
                    dr["WT"] = lblWT.Text;
                    dr["ExitUni"] = txtExitUnits.Text.Trim();

                    //string code = hfcode.Value;
                    checkedData.Rows.Add(dr);
                    Session["CheckedRows"] = checkedData;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多