2013-03-19 81 views
2

我在列表视图中获得了一个数据表。从列表视图中删除行根据列的值

ID TelcoName重载值(RM)数量合计(RM) 1 Maxis的5 1 5删除 2的Digi 5 1 5删除

这基本上就是我的桌子的样子。 我的HTML代码是这样的:

<asp:ListView ID="ListView1" runat="server" OnSorting="ListView1Sorting" OnItemCommand="ListView1_ItemCommand"> 
        <LayoutTemplate> 
          <table border="0" cellpadding="1"> 
           <tr style="background-color:#FFFFFF"> 
            <th align="center"><asp:Label ID="lblId" runat="server">Id &nbsp;</asp:Label></th> 
            <th align="center"><asp:Label ID="lblName" runat="server">TelcoName&nbsp;</asp:Label></th> 
            <th align="center"><asp:Label ID="lblReloadValue" runat="server">Reload Value(RM)&nbsp;</asp:Label></th> 
            <th align="center"><asp:Label ID="lblQuantity" runat="server">Quantity&nbsp;</asp:Label></th> 
            <th align="center"><asp:Label ID="lblTotal" runat="server">Total (RM)&nbsp;</asp:Label></th>          
            <th></th> 
           </tr> 
           <tr id="itemPlaceholder" runat="server"></tr> 
          </table> 
         </LayoutTemplate> 
         <ItemTemplate> 
         <tr> 
         <td align="center"><asp:Label runat="server" ID="lblId"><%#Eval("ID") %></asp:Label></td> 
         <td align="center"><asp:Label runat="server" ID="lblTelcoName"><%#Eval("TelcoName") %></asp:Label></td> 
         <td align="center"><asp:Label runat="server" ID="lblReloadValue"><%#Eval("ReloadValue")%></asp:Label></td> 
         <td align="center"><asp:Label runat="server" ID="lblQuantity"><%#Eval("Quantity")%></asp:Label></td> 
         <td align="center"><asp:Label runat="server" ID="lblTotal"><%#Eval("Total")%></asp:Label></td> 
         <td align="center"><asp:LinkButton ID="lnkDelete" runat="server" CommandName="Sort" CommandArgument="Delete">Delete</asp:LinkButton></td> 
         </tr> 
         </ItemTemplate> 
        </asp:ListView> 

这是我后面的代码删除:

保护小组ListView1_ItemCommand(BYVAL发件人为对象,BYVALË作为ListViewCommandEventArgs) 如果(e.CommandName)=“排序“ Dim txteno As Label = DirectCast(e.Item.FindControl(”ID“),Label) Dim deletecommand As String =”Delete from dt where ID =“& Convert.ToInt32(txteno.text) Session(” dt“)DeleteCommand = deletecommand End If End Sub

这里我的问题是我没有得到用户选择的行的ID。 “ID”是第一列的名称,但是当我运行网站时,此声明不返回任何内容。

昏暗txteno作为标签= DirectCast(e.Item.FindControl(“ID”),标签)

我的问题是如何检索列(“ID”)的值,以用于所述删除数据?我问周围有人建议我使用e.item.DataItemIndex,但我coudnt找到这个命令的任何地方。任何想法如何解决这个问题?

此刚刚添加

昏暗dt的作为新的DataTable 昏暗I = 0 昏暗ID作为新的DataColumn( “ID”) dt.Columns.Add(ID) 昏暗TelcoName作为新的DataColumn( “TelcoName”) dt.Columns.Add(TelcoName) 昏暗ReloadValue作为新的DataColumn( “ReloadValue”) dt.Columns.Add(ReloadValue) 昏暗数量作为新的DataColumn( “数量”) dt.Columns.Add (Quantity) Dim Total As New DataColumn(“Total”) dt.Columns.Add(Total ) ListView1.DataSource = DT ListView1.DataBind() 会议(“DT”)= DT

之后我绑定到列表视图,我需要为数据表delcare一个名字,这样我可以把它作为对于sql语句的引用,或者我可以将它作为dt和sql语句,当我引用dt时,它引用listview中的表?

回答

1

编辑:单独解决两个问题 - 一个是控制手柄不能被抓住,另一问题是围绕从一个DataTable

控制参考

删除如果你想获得一个使用这种控制手柄:

Dim txteno As Label = DirectCast(e.Item.FindControl("ID"), Label) 

那么我想控制ID是不正确的在你的标记你已经将它定义为“lblId”。因此,也许尝试:

Dim txteno As Label = DirectCast(e.Item.FindControl("lblId"), Label) 

而且,我不知道它会产生什么影响,但我想给控件的LayoutTemplate模板(所以我猜测你的ListView头)不同的ID给控制在ItemTemplate,如果仅用于维护/清洁,如果没有别的。

标签也应约束,如:在

<asp:Label id="lblId" runat="server" Text='<%# Eval("ID") %>'></asp:Label> 

使代码隐藏的文本可以被检索到。

从数据表

根据海报上的评论删除,数据表的数据不会从数据库中来。

由于您没有连接回数据库,因此不必编写SQL以从DataTable中删除项目。

它看起来像你在会话中存储DataTable。而且你也完全在代码中绑定。因此,你可以在你的ItemCommand方法做的是:

  1. 遍历数据表中找到要删除的项目
  2. 删除的项目(可以协商,例如,this论坛发帖)
  3. 从DataTable中删除项目后,将其重新绑定到列表视图。至于谁似乎已经在类似情况下的人的例子,请参阅this

HTH, 弥敦道

+0

我确实如你所说,并从“ID”到“lblID”但即时变化仍无法返回我需要的行索引。我收到的只是lblID的空白。有人告诉我,这是因为DirectControl只适用于ListView_ItemDataBound方法中的渲染时间。我可以知道这是什么意思吗?顺便提一下,我仍然找到了这个方法。 – 2013-03-19 03:14:39

+0

你好,你使用“lblID”还是“lblId” - 它会区分大小写。我会回复你的其他问题,尽我所能在一个单独的评论.... – nkvu 2013-03-19 03:28:17

+0

回复:e.Item.DataItemIndex,您正在使用哪个版本的.NET?如果您查看[ListViewCommandEventArgs]的文档(http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.listviewcommandeventargs.item.aspx),它有一个Item属性,其中包含ListViewItem类型。如果您在ListViewItem处查找[此处](http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.listviewitem.dataitemindex.aspx),则DataItemIndex属性仅在.NET 4中可用或4.5 ...可能这就是为什么你找不到该方法? – nkvu 2013-03-19 03:32:03