2

リストビューでデータテーブルを取得しました。

ID TelcoName Reload Value(RM) Quantity Total(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>

これは、削除するための私の背後にあるコードです:

Protected Sub ListView1_ItemCommand(ByVal sender As Object, ByVal e As ListViewCommandEventArgs) If (e.CommandName) = "Sort" Then 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」は最初の列の名前ですが、Web サイトを実行すると、このステートメントは何も返しません。

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

私の質問は、データの削除に使用する列 ("Id") の値を取得するにはどうすればよいですか? 私は周りに尋ね、誰かが私に e.item.DataItemIndex を使用するように提案しましたが、どこにもこのコマンドを見つけることができませんでした。これを解決する方法はありますか?

これは追加されたばかりです

Dim dt As New DataTable Dim i = 0 Dim ID As New DataColumn("ID") dt.Columns.Add(ID) Dim TelcoName As New DataColumn("TelcoName") dt.Columns.Add(TelcoName) Dim ReloadValue As New DataColumn ("ReloadValue") dt.Columns.Add(ReloadValue) Dim Quantity As New DataColumn("Quantity") dt.Columns.Add(Quantity) Dim Total As New DataColumn("Total") dt.Columns.Add(Total) ListView1 .DataSource = dt ListView1.DataBind() セッション("dt") = dt

リストビューにバインドした後、SQL ステートメントの参照として使用できるようにデータテーブルの名前を指定する必要がありますか、それとも dt として残し、SQL ステートメントで dt を参照するときに参照することができますか?リストビューのテーブルに?

4

1 に答える 1

1

編集: 2 つの質問に個別に対処する - 1 つはコントロール ハンドルを取得できなかったこと、もう 1 つは DataTable からの削除に関する質問です。

コントロール リファレンス

これを使用してコントロールのハンドルを取得しようとしている場合:

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

次に、マークアップで「lblId」として定義したため、コントロール ID が正しくないと思います。だからおそらく試してみてください:

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

また、それがどのような影響を与えるかはわかりませんが、LayoutTemplate のコントロールに (ListView のヘッダーを推測しているので) ItemTemplate のコントロールに異なる ID を与えます。 .

ラベルも次のようにバインドする必要があります。

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

そのため、分離コードでテキストを取得できます。

DataTable からの削除

投稿者のコメントによると、DataTable のデータはデータベースから取得されたものではありません。

データベースに接続していないため、DataTable から項目を削除するために SQL を記述する必要はありません。

DataTable をセッションに保存しているようです。また、コードで完全にバインドしていること。そのため、ItemCommand メソッドでできることは次のとおりです。

  1. データ テーブルを反復処理して、削除する項目を見つけます
  2. アイテムを削除します (たとえば、このフォーラムの投稿を参考にしてください) 。
  3. アイテムが DataTable から削除されたら、リスト ビューに再バインドします。同様の状況にあったと思われる人の例として、これを参照してください

HTH、ネイサン

于 2013-03-19T03:04:02.213 に答える