1

テキストファイルから読み取ったすべての行の値を含むグリッドビューがあります。私がやりたいことは、グリッドビューで選択した行を編集して削除することです。テキストファイルのすべての行を表示するコードは既にあります。

<asp:GridView ID="GVAnnouncement" runat="server" 
  AutoGenerateColumns="True" EmptyDataText="- No file saved -">
  <Columns>
    <asp:TemplateField HeaderText="No.">
      <ItemTemplate>
        <%# Container.DisplayIndex + 1%>
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>

コード ビハインドについて:

'''''Read every row then show it on gridview'''''

' Declarations  
Dim objStreamReader As New StreamReader(Server.MapPath("Announcement.txt"))
Dim arrText As New ArrayList

' Loop through the file and add each line to the ArrayList  
Do While objStreamReader.Peek() >= 0
    arrText.Add(objStreamReader.ReadLine)
Loop

' Close the reader  
objStreamReader.Close()

' Bind the results to the GridView  
GVAnnouncement.DataSource = arrText
GVAnnouncement.DataBind()

私が尋ねようとしているのは、選択した行の戻り値のインデックスを取得し、値をテキストボックスに入力してからテキストファイルに更新するにはどうすればよいですか? どうもありがとうございました。

4

2 に答える 2

1

void を使用できますRowDeleted。行を識別する Datakeys に何かを格納します。それを使用してkeys、好きなことをすることができRowDeletedます。このような:

ASPX

<asp:GridView ID="GVAnnouncement" DataKeyNames="ID" runat="server" 
onrowdeleted="GVAnnouncement_RowDeleted" ...

CS

Sub GVAnnouncement_RowDeleted(ByVal sender As Object, ByVal e As GridViewDeletedEventArgs)
   e.Keys("ID")
End Sub

ファイルで ID を見つけて行を削除し、グリッドを再度バインドします。

于 2012-04-07T09:46:37.857 に答える
1

最初に 1 つの提案: 通常、ファイルは最適なストレージではありません。代わりにdbmsを使用することを検討してください。

ファイル内の行を編集/削除する場合、おそらく最も簡単なのは、すべての行を再度作成することです。たとえば、インデックスを に格納できますHiddenField

<ItemTemplate>
    <asp:HiddenField runat="server" ID="HiddenIndex" Value="<%# Container.DataItem.Index %>" />
    <asp:Label ID="LblAnnouncement" Text="<%# Container.DataItem.Announcement %>" runat="server"></asp:Label>
</ItemTemplate>

Dim allAnnouncements = IO.File.ReadAllLines(Server.MapPath("Announcement.txt"))
Dim source = allAnnouncements.Select(Function(l, index) New With {.Index = index, .Announcement = l}).ToList

' Bind the results to the GridView  
GVAnnouncement.DataSource = source 
GVAnnouncement.DataBind()

次に、次の方法でそれらを編集/削除できます。

Protected Sub GridView1_RowUpdated(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)  
    Dim grid = DirectCast(sender, GridView)
    Dim index = Int32.Parse(DirectCast(grid.Rows(e.RowIndex).FindControl("HiddenIndex"), HiddenField).Value)
    Dim oldAnnamouncement = e.OldValues(0).ToString
    Dim newAnnouncement = e.NewValues(0).ToString
    If Not oldAnnamouncement.Equals(newAnnouncement) Then
        Dim allAnnouncements = IO.File.ReadAllLines(Server.MapPath("Announcement.txt"))
        allAnnouncements(index) = newAnnouncement
        IO.File.WriteAllLines(Server.MapPath("Announcement.txt"), allAnnouncements)
    End If

    'Reset the edit index.
    GridView1.EditIndex = -1

    'Bind data to the GridView control.
    BindData()
End Sub



Protected Sub GridView1_RowDeleting(sender As Object, e As System.Web.UI.WebControls.GridViewDeleteEventArgs)
    Dim grid = DirectCast(sender, GridView)
    Dim index = Int32.Parse(DirectCast(grid.Rows(e.RowIndex).FindControl("HiddenIndex"), HiddenField).Value)

    Dim allAnnouncements = IO.File.ReadAllLines(Server.MapPath("Announcement.txt"))
    IO.File.WriteAllLines(Server.MapPath("Announcement.txt"), allAnnouncements.Where(Function(l, i) index <> i))

    'Bind data to the GridView control.
    BindData()
End Sub
于 2012-04-07T09:46:51.667 に答える