web-dev-qa-db-ja.com

VB.NET:DataGridViewをクリア

私はもう試した -

DataGridView1.DataSource=Nothing

そして

DataGridView1.DataSource=Nothing
DataGridView1.Refresh()

そして

DataGridView1.RefreshEdit()

どれも機能しません。

実行時にDataGridViewのDataSourceを設定するメソッドを作成しました。しかし、それを実行するたびに、新しい値でデータを複製し、DGVの以前のコンテンツに追加します。コンテンツをクリアしてから値を追加します。それは可能ですか?

22
Bibhas Debnath

DataGridViewが任意のデータソースにバインドされている場合、DataGridViewのDataSourceプロパティをNothingに設定する必要があります。

DataGridViewがデータソースにバインドされていない場合、このコードはトリックを実行します。

DataGridView.Rows.Clear()
63
Alex Essilfie

バインドされていない場合は、次のことに注意してください。

DataGridView.Rows.Clear()

columnsコレクションをそのまま残します。

DataGridView.Columns.Clear()

..すべての列と行を削除します。バインドされていないDGVを使用していて、次に列の変更を使用する場合、行のクリアは適切ではない可能性があります。ライブラリコードの場合、列を追加する前にすべての列をクリアします。

9
rheitzman

おそらくこれを使用します...

DataGridView1.Rows.Clear()

行をクリアしてから再バインドします。

8
Jason Punyon

このような簡単な方法に従ってください

taDataTableであると仮定します

ta.clear()
DataGridView1.DataSource = ta
DataGridView1.DataSource = Nothing
3
Nal MEN

データソースをnullに設定すると列が削除されることがわかりました。これは私のために働くものです:

c#:

((DataTable)myDataGrid.DataSource).Rows.Clear();

VB:

Call CType(myDataGrid.DataSource, DataTable).Rows.Clear()
1
Ron Rebennack

DataGridViewに対しては何もせず、データソースをクリアするだけです。 myDataset.clear()メソッドをクリアしてみたところ、動作しました。

1
user3717731

新しい結果を検索しているときにdatagridviewの古いレコードを削除するには、button_clickイベントで次のコードを記述します。

me.DataGridview1.DataSource.clear()

このコードは、datagridviewの古いレコードを削除するのに役立ちます。

1
karthikeyan

Datagridviewを(nullではなく)空のコレクションにバインドすることはできません。それはトリックですか?

1
FiveTools

DataGridViewもDataSourceにバインドされており、myDataGridView.Columns.Clear()は正常に機能しましたが、myDataGridView.Rows.Clear()は機能しませんでした。試してみた人の参考までに.Rows

1
leoraelkins

Clear datagridviewコマンドを実装したい場所でこのコードを使用します

datagridview1.datasource= nothing
datagridview1.datasource= ds
dt.clear()               'Dt as new DATATABLE
ds.clear()              'Ds as new Dataset

このコードは、datagridviewをクリアし、データベースからデータを取り込むときにデータの複製を停止します。

0
D.Bhardwaj

Gridviewのコンテンツのクリアについても同じ問題がありました。使用したデータソースは列のないデータテーブルであり、プログラムで列と行をデータテーブルに追加しました。次に、datagridviewにバインドします。 gridView.Rows.Clear()gridView.DataSource = Nothingなどのgridviewに関連するコードを試しました

しかし、私にはうまくいきませんでした。その後、毎回datagridviewにバインドする前に、datatableに関連する以下のコードを試してください。

  dtStore.Rows.Clear()
  dtStore.Columns.Clear()
  gridView.DataSource = dtStore

DataGridViewでのレプリケーションはなく、正常に動作しています

0

同じ問題がありました:RadioButtonList1から2番目のテーブルを選択したときに、GridView1を1つのSQLテーブル[dictonary]または別の[meny]にプログラムでバインドしていましたが、エラー(System.Web.HttpException:Field or propertyタイトル[以前に選択したテーブルの最初の列のタイトル]が選択したデータソースに見つかりませんでした。つまり、最初に選択したテーブルの列が見つからなかったと言います。私がする必要があるのは、挿入することだけでした:

GridView1.Columns.Clear()

テーブルの列を追加する前に。完全なコードは次のとおりです。

Dim connectionString As String = "your-string-details"
Dim connection As New SqlConnection(connectionString)

次に、最初のサブが来ます:

Private Sub BindOrders()
    connection.Open()

    Dim sqlCommand As String = "SELECT * FROM [dictionary]" 
    Dim dataAdapter As New SqlDataAdapter(sqlCommand, connection)
    Dim dt As New DataTable() 
    dataAdapter.Fill(dt)

    GridView1.Columns.Clear() ' clear columns before adding new ones

    If GridView1.Columns.Count <= 0 Then
        Dim Field As New BoundField()
        Field.DataField = "id"
        Field.HeaderText = "id"
        GridView1.Columns.Add(Field)

        Field = New BoundField()
        Field.DataField = "strArHundreds"
        Field.HeaderText = "strArHundreds"
        GridView1.Columns.Add(Field)

        Field = New BoundField()
        Field.DataField = "strArTens"
        Field.HeaderText = "strArTens"
        GridView1.Columns.Add(Field)

        Field = New BoundField()
        Field.DataField = "strArSingles"
        Field.HeaderText = "strArSingles"
        GridView1.Columns.Add(Field)
    End If

    GridView1.DataSource = dt
    GridView1.DataBind()

    connection.Close()
End Sub

次に、2番目のサブが来ます。

Private Sub BindDocuments()
    connection.Open()

    Dim sqlCommand As String = "SELECT * FROM [meny]"
    Dim dataAdapter As New SqlDataAdapter(sqlCommand, connection)
    Dim dt As New DataTable()

    dataAdapter.Fill(dt)

    GridView1.Columns.Clear() ' clear columns before adding new ones

    If GridView1.Columns.Count <= 0 Then
        Dim Field As New BoundField
        Field = New BoundField
        Field.DataField = "id"
        Field.HeaderText = "id"
        GridView1.Columns.Add(Field)

        Field = New BoundField
        Field.DataField = "nazev"
        Field.HeaderText = "nazev"
        GridView1.Columns.Add(Field)
    End If

    GridView1.DataSource = dt
    GridView1.DataBind()

    connection.Close()
End Sub

最後に、RadioButtonが登場します。

Protected Sub RadioButtonList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RadioButtonList1.SelectedIndexChanged
    Dim index As Integer
    index = RadioButtonList1.SelectedIndex
    Select Case index
        Case 0
            BindOrders()
            Exit Select
        Case 1
            BindDocuments()
            Exit Select
    End Select
End Sub

完了のために、関連するaspx.fileのGridView1およびRadioButtonList1のコードを以下に示します。

<asp:RadioButtonList ID="RadioButtonList1"
    runat="server"
    AutoPostBack="True"
    OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged">
    <asp:ListItem>Obraty</asp:ListItem>
    <asp:ListItem>Dokumenty</asp:ListItem>
</asp:RadioButtonList>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
</asp:GridView>

これは現在すべてうまく機能しています。

0
Barbora

これを書いてください

DataGridView1.DataSource = ""
0
Areej Qasrawi

データグリッドがデータテーブルにバインドされている場合、データセットからテーブルを削除する必要があります。 Gridviewは自動的にクリアされます。他に方法はありません。

[YourDatasetName].Tables.Clear()
0
Samiran Nath

SQLクエリからdatagridviewに情報を入力する場合、リロードする前に最初にdatagridviewをクリアできます。

DbDataSetをNew DataTableとして定義した場合、明確にすることができます。 dbDataSetは、パブリッククラスフォーム内のフォームの先頭にある必要があります

Dim dbDataset AS New DataTable

あなたのコード内にプライベートサブ、場所

dbDataSet.Clear()
0
user3741825

GridView(名前がgvArchiveとする)が任意のDataSourceにバインドされている場合、次のようにクリアされます。

gvArchive.DataSource = Nothing

gvArchive.DataBind()
0
Neil
_Dim DS As New DataSet
_

DS.Clear()-DATASET clearはDataGridView.Rows.Clear()よりもうまく機能します:

_Public Sub doQuery(sql As String)
   Try
        DS.Clear()  '<-- here
        '   - CONNECT -
        DBCon.Open()
        '   Cmd gets SQL Query
        Cmd = New OleDbCommand(sql, DBCon)
        DA = New OleDbDataAdapter(Cmd)
        DA.Fill(DS)
        '   - DISCONNECT -
        DBCon.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
_
0
Michał R

あなたが犯している間違いは、データの保存にデータセットオブジェクトを使用しているように見えることです。次のコードを使用してデータセットにデータを配置するたびに、データセットに既にあるデータにデータを追加します。

myDataAdapter.Fill(myDataSet)

次のコードでデータセットのテーブルをプログラムのDataGridViewオブジェクトに割り当てると、データセットとデータセットテーブルに既に存在するデータをクリアしていないため、重複した結果が得られます。

myDataGridView.DataSource = myDataSet.Tables(0)

データの複製を回避するには、データセットオブジェクトでclearメソッドを呼び出す必要があります。

myDataSet.clear()

次に、データセット内のテーブルをDataGridViewオブジェクトに割り当てます。コードはこのようなものです。

myDataSet.clear()
myDataAdapter.Fill(myDataSet)
myDataGridView.DataSource = myDataSet.Tables(0)

このコードを試すことができます:

' clear previous data
DataGridView2.DataSource = Nothing
DataGridView2.DataMember = Nothing
DataGridView2.Refresh()
Try
    connection.Open()
    adapter1 = New SqlDataAdapter(sql, connection)
    ' clear data already in the dataset
    ds1.Clear()
    adapter1.Fill(ds1)
    DataGridView2.DataSource = ds1.Tables(0)
    connection.Close()
Catch ex As Exception
    MsgBox(ex.ToString)
End Try
0
Meisam Rasouli

1)Clear.Insideという名前のボタンを作成し、次のコードを挿入しますdatagridviewer.DataSource = nothing

2)検索ボタンで、次のステートメントからコードを開始します

datagridviewer.DataSource = DataSet.table

Nb:テーブルの代わりに、テーブルの実名を置きますex:datagridviewer.DataSource = DataSet.client

0
Limanidt

DataGridViewが任意のデータソースにバインドされている場合、

DataGridView1.DataSource = Nothing
DataGridView1.DataBind()
0
SUHAIL AG

データバインディングを保持し、DataGridViewを一時的にクリアするだけのユーザーシナリオがあります。たとえば、ユーザーがマップ上の施設をクリックして、編集する属性を表示するようにします。彼は初めてクリックするか、既にクリックして編集しています。ユーザーが[ファシリティの選択]ボタンをクリックすると、前のファシリティのデータのDataGridViewをクリアします(最初の選択の場合はエラーをスローしません)。このシナリオでは、DataGridViewを埋める生成コードを調整することにより、クリーンなDataGridViewを実現できます。生成されたコードが次のようになっているとします:

    Try
        Me.Fh_maintTableAdapter.FillByHydrantNumber(Me.Fh2010DataSet.fh_maint, hydrantNum)
    Catch ex As System.Exception
        System.Windows.Forms.MessageBox.Show(ex.Message)
    End Try

給水栓番号に基づいてDataGridViewを埋めています。このコードをDataGridViewをクリアするポイントにコピーし、データを取得しないことがわかっている「hydrantNum」の値に置き換えます。グリッドがクリアされます。そして、ユーザーが実際に施設(この場合は給水栓)を選択すると、DataGridViewを適切に埋めるためのバインディングが行われます。

0
Charlie Marlin

このコードはWindowsフォームで動作しますが、

Public Class Form1

    Private dataStuff As List(Of String)


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        DataGridView1.DataSource = Nothing

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        dataStuff = New List(Of String)

        dataStuff.Add("qwerty")
        dataStuff.Add("another")
        dataStuff.Add("...and another")

        DataGridView1.DataSource = dataStuff
    End Sub
End Class
0
bristows