在列表视图中获取文本框的文本

时间:2014-06-06 10:14:29

标签: asp.net listview

我有一个ListView,我有一个asp:TextBox

        <table>
              <asp:ListView ID="Users" runat="server" 
                    DataKeyNames="Email" onitemediting="Users_ItemEditing" 
                    onitemupdating="Users_ItemUpdating">
               <LayoutTemplate>
               <tr>
               <td style=" width:34%;border-bottom:1px solid black;">Name</td>
               <td></td>
               </tr>
               <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
               </LayoutTemplate>
               <ItemTemplate>
               <tr>
               <td>
               <%# Eval("name") %>
               </td>
               <td>  
               <asp:LinkButton ID="Edit" runat="server" CommandName="Edit">Edit</asp:LinkButton> 
               </td>
               </tr>
               </ItemTemplate>
               <EditItemTemplate>
               <tr>
               <td>     
               <asp:TextBox ID="Name" runat="server" Text='<%# Bind("name") %>'></asp:TextBox> 
               </td>
               <td> 
               <asp:LinkButton ID="Update" runat="server" CommandName="Update">Update</asp:LinkButton> 
               </td>  
               </tr>
               </EditItemTemplate>
               </asp:ListView>

            </table>

当我更改文本框中的文本,然后尝试在后面的代码中得到它:

   protected void Users_ItemEditing(object sender, ListViewEditEventArgs e)
   {
       this.Users.EditIndex = e.NewEditIndex;
       BindTheListView();
   }
   protected void Users_ItemUpdating(object sender, ListViewUpdateEventArgs e)
   {
       string Name=((TextBox)Users.Items[e.ItemIndex].FindControl("Name")).Text;
   this.Users.EditIndex = -1;
   BindTheListView();
}

* BindTheListView()绑定列表视图Users,它可以正常工作。

它需要TextBox的原始文字,<%# Bind("name") %>,而不是我刚刚更改过的内容。

更新功能要长得多,所以我只放了我认为需要的东西。我知道Name在文本框中重复了之前的文本,因为updtade函数不起作用(它没有改变数据库中的任何内容)所以我运行debugg并且我看到Name重现前面的内容< / p>

我如何处理我输入textbox的文字而不是其中的内容?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

在User.ItemUpdating中,从e.NewValues集合中获取新值。

编辑:

使用DataList而不是ListView:

<table>
    <asp:DataList ID="Users" runat="server"  DataKeyField="Email" OnEditCommand="Users_ItemEditing"
        OnUpdateCommand="Users_ItemUpdating">
        <HeaderTemplate>
            <tr>
                <td style="width: 34%; border-bottom: 1px solid black;">
                    Name
                </td>
                <td>
                </td>
            </tr>
            <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <%# Eval("name") %>
                </td>
                <td>
                    <asp:LinkButton ID="Edit" runat="server" CommandName="Edit">Edit</asp:LinkButton>
                </td>
            </tr>
        </ItemTemplate>
        <EditItemTemplate>
            <tr>
                <td>
                    <asp:TextBox ID="Name" runat="server" Text='<%# Bind("name") %>'></asp:TextBox>
                </td>
                <td>
                    <asp:LinkButton ID="Update" runat="server" CommandName="Update">Update</asp:LinkButton>
                </td>
            </tr>
        </EditItemTemplate>
    </asp:DataList>
</table>

代码背后:

protected void Users_ItemEditing(object sender, DataListCommandEventArgs e)
    {
        this.Users.EditItemIndex = e.Item.ItemIndex;
        BindTheListView();
    }
    protected void Users_ItemUpdating(object sender, DataListCommandEventArgs e)
    {
        string Name = ((TextBox)e.Item.FindControl("Name")).Text;
    }

答案 1 :(得分:0)

页面加载时使用

if (!IsPostBack)
{
    BindTheListView();
}