让转发器内的Checkbox将数据从转发器内的文本框发送到转发器外部的另一个文本框

时间:2017-09-29 18:04:54

标签: c# asp.net repeater

我有一个转发器,它填充了3列的列表,每行旁边都有一个复选框。我正在尝试创建一个人检查行的方案,页面找到"部分名称"中继器行内的文本框与单击复选框的行对应,选中该复选框后,它将部分名称发送到转发器外的另一个文本框,名为" testTextBox.Text"。我在下面有我的代码,并且我确定我错过了一些东西,因为我没有做过" OnCheckChanged"之前的事件,我只熟悉onTextChanged事件。

以下是代码:

<asp:Repeater ID="rptAccount" runat="server" OnItemCommand="rptAccount_ItemCommand">
             <HeaderTemplate>
                            <table>
                                <tr>
                                    <th>Account
                                    </th>
                                    <th>Portion ID
                                    </th>
                                    <th>Portion Name
                                    </th>                                                                                                
                                </tr>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <tr>
                                <td>
                                   <asp:TextBox ID="Account"  runat="server" Width ="50px" Text='<%#Eval("Account") %>' ></asp:TextBox>
                                </td>
                                <td>
                                   <asp:TextBox ID="PortionID"  runat="server" Width ="90px" Text='<%#Eval("Portion ID") %>' ></asp:TextBox>
                                </td>
                                <td>
                                    <asp:TextBox ID="PortionName" runat="server" Width ="340px" Text='<%#Eval("Portion Name") %>'></asp:TextBox>
                                </td>    
                                <td>
                                    <asp:CheckBox ID="Name" runat="server" OnCheckedChanged = "TbName_CheckedChanged" Checked='<%# Eval("Name").ToString() == "True" %>' ></asp:CheckBox>
                                    </td>                                                                            
                               </tr>
                        </ItemTemplate>
                        <FooterTemplate>
                            </table>
                        </FooterTemplate>     
        </asp:Repeater>

cs code:

protected void TbName_CheckedChanged(object sender, EventArgs e)
    {
        var PortionName = (sender as TextBox).Parent;
        var rptAccount = (sender as TextBox).Parent;
        var checkedd = rptAccount.FindControl("Name") as CheckBox;
        var PortionNamee = rptAccount.FindControl("PortionName") as TextBox;


        if (checkedd.Checked)
        {
            testTextBox.Text = PortionNamee.Text;
            }

    }

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

转发器最终拥有大量名称为Name的控件。请记住,模板重复多次。你需要找到当前项目的索引。将属性附加到复选框以保存文本值的更简单方法是,您可以直接从发件人中提取它,而无需担心父级和索引。试试这个:

<asp:Repeater ID="rptAccount" runat="server" OnItemCommand="rptAccount_ItemCommand">
             <HeaderTemplate>
                            <table>
                                <tr>
                                    <th>Account
                                    </th>
                                    <th>Portion ID
                                    </th>
                                    <th>Portion Name
                                    </th>                                                                                                
                                </tr>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <tr>
                                <td>
                                   <asp:TextBox ID="Account"  runat="server" Width ="50px" Text='<%#Eval("Account") %>' ></asp:TextBox>
                                </td>
                                <td>
                                   <asp:TextBox ID="PortionID"  runat="server" Width ="90px" Text='<%#Eval("Portion ID") %>' ></asp:TextBox>
                                </td>
                                <td>
                                    <asp:TextBox ID="PortionName" runat="server" Width ="340px" Text='<%#Eval("Portion Name") %>'></asp:TextBox>
                                </td>    
                                <td>
                                    <asp:CheckBox ID="Name" runat="server" OnCheckedChanged = "TbName_CheckedChanged" CommandName='<%#Eval("Portion Name") %>' Checked='<%# Eval("Name").ToString() == "True" %>' ></asp:CheckBox>
                                    </td>                                                                            
                               </tr>
                        </ItemTemplate>
                        <FooterTemplate>
                            </table>
                        </FooterTemplate>     
        </asp:Repeater>

cs code:

protected void TbName_CheckedChanged(object sender, EventArgs e)
    {   
        var checkedd = sender as Checkbox;     

        if (checkedd.Checked)
            testTextBox.Text = checkedd.Attributes["CommandName"];
    }