如何在嵌套列表视图中编辑数据

2024-05-30

我使用列表视图来显示项目列表,并使用嵌套列表视图来显示每个项目的功能列表。父列表视图和子列表视图都需要能够进行插入、编辑和删除操作。它适用于父列表视图。但是,当我尝试编辑子项目时,编辑按钮不会将其带入编辑模式。您能建议我代码中缺少什么吗?

<asp:ListView ID="lvParent" runat="server"                 
                OnItemDataBound="lvParent_ItemDataBound" 
                onitemcanceling="lvParent_ItemCanceling" onitemcommand="lvParent_ItemCommand" 
                DataKeyNames="ItemID" onitemdeleting="lvParent_ItemDeleting" 
                oniteminserting="lvParent_ItemInserting"  >
                <LayoutTemplate>                                        
                    <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
                    <div align="right">
                        <asp:Button ID="btnInsert" runat="server" Text="ADD Item" onclick="btnInsert_Click"/>
                    </div>
                </LayoutTemplate>
                <ItemTemplate>
                    <table runat="server" cellpadding="0" cellspacing="0" border="0"  width="100%">
                        <tr>
                            <td>
                                <div id="dvDetail">
                                    <span >Description</span>

                                    <asp:TextBox ID="txtDescription" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Description") %>' TextMode="MultiLine" ></asp:TextBox>

                                </div>                                
                                <div id="dvFeature" >
                                    <span>Feature List</span>                                                                  
                                    <asp:ListView ID="lvChild" runat="server"  
                                        InsertItemPosition="LastItem" 
                                        DataKeyNames="FeatureID" OnItemCommand="lvChild_ItemCommand"
                                         OnItemCanceling="lvChild_ItemCanceling" OnItemDeleting="lvChild_ItemDeleting" 
                                         OnItemEditing="lvChild_ItemEditing" OnItemInserting="lvChild_ItemInserting" OnItemUpdating="lvChild_ItemUpdating"
                                        DataSource='<%# DataBinder.Eval(Container.DataItem, "FeatureList") %>' >
                                        <LayoutTemplate>
                                            <ul >
                                                <asp:PlaceHolder runat="server" ID="itemPlaceHolder" ></asp:PlaceHolder>                                                                                                                               
                                            </ul>   
                                        </LayoutTemplate>
                                        <ItemTemplate>
                                            <li>
                                                <span class="dvList"><%# DataBinder.Eval(Container.DataItem, "FeatureTitle")%></span>                                                

                                                <div class="dvButton" >
                                                    <asp:ImageButton ID="btnEdit" runat="server" ImageUrl="/Images/edit_16x16.gif" AlternateText= "Edit" CommandName="Edit" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "FeatureID") %>' Width="12" Height="12" />
                                                    <asp:ImageButton ID="btnDelete" runat="server" ImageUrl="/Images/delete_16x16.gif" AlternateText= "Delete" CommandName="Delete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "FeatureID") %>' Width="12" Height="12" />

                                                </div>

                                            </li>

                                        </ItemTemplate>
                                        <EditItemTemplate>
                                            <li>
                                                <asp:TextBox ID="txtFeature"  Text='<%# DataBinder.Eval(Container.DataItem, "FeatureTitle")%>' runat="server"></asp:TextBox>

                                                <div class="dvButton">
                                                    <asp:ImageButton ID="btnUpdate" runat="server" ImageUrl="/Images/ok_16x16.gif" AlternateText= "Update" CommandName="Update" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "FeatureID") %>' Width="12" Height="12" />
                                                    <asp:ImageButton ID="btnCancel" runat="server" ImageUrl="/Images/delete_16x16.gif" AlternateText= "Cancel" CommandName="Cancel" Width="12" Height="12" CausesValidation="false" />

                                                </div>

                                            </li>
                                        </EditItemTemplate>
                                        <InsertItemTemplate>                                            
                                                <asp:TextBox ID="txtFeature" runat="server"></asp:TextBox>

                                                <div class="dvButton">
                                                    <asp:ImageButton ID="btnInsert" runat="server" ImageUrl="/Images/ok_16x16.gif" AlternateText= "Insert" CommandName="Insert" Width="12" Height="12" />
                                                    <asp:ImageButton ID="btnCancel" runat="server" ImageUrl="/Images/delete_16x16.gif" AlternateText= "Cancel" CommandName="Cancel" Width="12" Height="12" CausesValidation="false" />

                                                </div>

                                        </InsertItemTemplate>
                                    </asp:ListView>
                                </div>                                
                            </td>

                        </tr>
                        <tr>
                            <td align="right">
                                <div id="dvButton" >
                                    <asp:Button ID="btnSave" runat="server"  Text="Save" 
                                        CommandName="Save"  
                                        CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ItemID")  %>' />
                                    <asp:Button ID="btnDelete" runat="server" Text="Delete"  CssClass="Cancel" 
                                        CommandName="Delete" 
                                        CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ItemID")  %>' />
                                </div>
                            </td>

                        </tr>                 
                    </table>                   
                </ItemTemplate>                   

            </asp:ListView>

背后代码:

protected void Page_Load(object sender, EventArgs e)
        {    
            if (Page.IsPostBack == false)
            {                  
                BindData();
            }           

        }

 private void BindData()
        {
            MyDataContext data = new MyDataContext();
            var result = from itm in data.ItemLists
                         where itm.ItemID == iItemID

                         select new
                         {
                             itm.ItemID,
                             itm.Description,                            
                             FeatureList =  itm.Features
                         };

            lvParent.DataSource = result;
            lvParent.DataBind();

        }

 protected void lvChild_ItemEditing(object sender, ListViewEditEventArgs e)
        {
            ListView lvChild = sender as ListView;            

            lvChild.EditIndex = e.NewEditIndex;

            lvChild.DataBind();

        }

Edit:

protected void lvChild_ItemEditing(object sender, ListViewEditEventArgs e)
            {
                ListView lvChild = sender as ListView;            

                lvChild.EditIndex = e.NewEditIndex;

                lvChild.DataBind();

            }

如果我在“ItemEditing”事件中使用“lvChild.DataBind()”,则如果单击“编辑”,子项目的总列表就会消失

protected void lvChild_ItemEditing(object sender, ListViewEditEventArgs e)
            {
                ListView lvChild = sender as ListView;            

                lvChild.EditIndex = e.NewEditIndex;              


            }

如果我在 ItemEditing 事件中删除“lvChild.Databind”,则单击“编辑”按钮两次后它将进入编辑模式。尽管它显示了 EditItemTemplate 的文本框控件,但它显示为空白文本框(不将现有值绑定到编辑)。


这是一个有趣的问题。几乎可以肯定是数据绑定问题。为了进入编辑模式,你必须做两件事:

1)设置编辑索引
2) 调用DataBind()

但在嵌套中继器的情况下......什么时候调用 Render?我怀疑您必须在 PARENT 上调用 DataBind() 才能正确渲染所有内容。在这种情况下,您可能必须再次设置 EditIndex,因为您正在重新绑定父级。

编辑: 好的...我只是用嵌套的 GridView 尝试了这个,我不需要 DataBind() 父级来让子网格进入编辑模式。现在我必须否决我自己的答案。 :|

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在嵌套列表视图中编辑数据 的相关文章

随机推荐

  • ref 用于变量而不是函数中的参数

    假设我有一个Person类并具有以下内容 Person A new Person Tom Person B A 有没有办法可以改变它 这样如果我分配一个新的Person to B B new Person Harry A也会指同一个实例吗
  • 如何在Scala中表达这个类型?存在类型类(即隐式)限制吗?

    我正在使用 Play 框架的 JSON 库 它使用类型类来实现Json toJson功能 http www playframework org documentation api 2 0 4 scala index html play ap
  • 调用方法参见java注解

    假设我有这样的情况 public String method String s return stringForThisVisibility s EnumVisibility PUBLIC 我想用这样的注释替换它 VisibilityLev
  • 在模型中重复数据以满足在集合中使用迪米特定律是否合适?

    这是一个人为的例子 假设我想列出一个人有朋友的国家的人口 这里有下面两个设置 最好在模型中重复数据吗 有人告诉我得墨忒耳定律 http en wikipedia org wiki Law of Demeter遵循这一点很重要 例如你告诉狗走
  • 如何关闭 VS Code 中的“快速修复”弹出窗口

    我正在 Windows 中运行 VS Code 1 52 1 编辑 JavaScript 代码 我是双击 复制和粘贴迷 我将鼠标悬停在某个内容上 例如函数名称 目的是双击将其复制到剪贴板 但有时 VS Code 想要建议 快速修复 这对我来
  • getBluetoothLeAdvertiser() 返回 null

    BluetoothLeAdvertiser advertiser BluetoothAdapter getDefaultAdapter getBluetoothLeAdvertiser 这将返回空值 我已在 API 21 和 API 23
  • 来自数据类型的 Haskell 随机数

    我对 Haskell 还很陌生 我有一个数据类型 data Sentence Prop Int No Sentence And Sentence Or Sentence deriving Eq 我已经为它写了一个 Show 实例 然而 无论
  • 在 open CL 中将结构数组传递给内核

    你好 我正在尝试在 open CL 中实现距离向量程序 基本上我在将结构数组作为参数传递到内核时遇到问题 我的结构定义是这样的 typedef struct int a nodes 4 node node srcA 为此分配内存后 我使用此
  • XML 命名空间 clr-namespace:XXX 中不存在标签“ViewModelLocator”

    我尝试了许多其他解决方案但没有成功 我有一堂课叫ViewModelLocator它位于我的便携式类库中 它有一个属性叫做ViewModels 其类型为Dictionay
  • 异步调用的任务限制?

    我有一个同步工作的 NET 4 5 WCF 客户端 我正在更新它以使用新的异步 等待功能来进行多个同时服务器调用以同时获取数据块 在结束之前 我担心同时运行的所有线程将使服务器饱和 更不用说明年升级到该角色时会终止我的 Azure 辅助角色
  • 如何检查网页页面是否滚动? [复制]

    这个问题在这里已经有答案了 javascript 有没有办法检查网页是否垂直滚动 专门针对 Internet Explorer 我需要在 IE 中获取鼠标位置 但使用 jQuery 事件 e pageY 当页面不滚动时它给出正确的值 但当页
  • 配置 Jackson 在 Spring Boot 中省略延迟加载属性

    在纯java配置的spring boot mvc项目中如何配置Jackson以省略延迟加载属性 使用最新版本的 Spring Boot 这要容易得多 com fasterxml jackson databind Module 类型的任何 b
  • Bootstrap 3 工具提示被包裹在每个空白处?

    升级到 bootstrap 3 后 工具提示会包裹在每个空白处 我相信这是由于网格而发生的 因此 如果我为文本框选择列 col sm 3 并且如果我将工具提示放在右侧 它将包裹所有空白并显示如下 如果我执行 data placement t
  • 结果集未打开。验证自动提交已关闭。阿帕奇·德布里

    我的数据库使用 apache derby 我能够对数据库执行插入操作 以下是尝试显示我唯一的表 MAINTAB 的内容的代码摘录 java sql Connection 的实例是 dbconn ResultSet word Statemen
  • 如何从父克隆中过去的提交中获取 git 子模块的关联提交 ID?

    有没有一种方法 除了实际检查父提交之外 还可以根据父克隆中的提交 ID 确定子模块的 SHA 1 提交 ID 我知道我能找到现在与 SHA 1 关联git submodule 这是一个例子 我有一个带有单个子模块的克隆foo上个月情况发生了
  • 使用路径id获取SVG路径d属性

    我有单独的 json 包含 SVG 路径 Id 有没有办法使用路径 id 获取 SVG 路径 d 属性 或者有没有办法只使用路径 ID 来填充 SVG 路径 您可以通过调用 document getElementById 来获取路径元素 然
  • << 和 += 有什么区别?

    我一直在尝试使用数组 发现自己在理解以下代码时遇到了困难 first array second array third array I initialized 3 empty arrays third array lt lt 1 2 3 4
  • 如何添加身份验证中间件 JWT django?

    我正在尝试创建一个中间件来使用 JWT 进行身份验证 但在视图中 request user 始终是 AnonymUser 当我验证中间件通过用户模型更改 request user 时 确实如此 但在到达视图时 由于某种原因 request
  • 用于测量图像中弯管长度的特征检测技术

    我有数百张来自荧光显微镜实验的 DNA 纳米管图像 我想使用图像处理以自动方式测量管长度的分布 这是显微镜图像示例 我尝试了一些使用 python 和 skimage 的特征提取方法 我尝试过使用 Canny 边缘检测 它成功地创建了每个纳
  • 如何在嵌套列表视图中编辑数据

    我使用列表视图来显示项目列表 并使用嵌套列表视图来显示每个项目的功能列表 父列表视图和子列表视图都需要能够进行插入 编辑和删除操作 它适用于父列表视图 但是 当我尝试编辑子项目时 编辑按钮不会将其带入编辑模式 您能建议我代码中缺少什么吗