سؤال

لقد حاولت -

DataGridView1.DataSource=Nothing

و

DataGridView1.DataSource=Nothing
DataGridView1.Refresh()

و

DataGridView1.RefreshEdit()

لا أحد منهم يعمل ..

لقد كتبت طريقة تحدد بيانات DataSource في DataGridView عند تنفيذها. ولكن في كل مرة أعمل بها، تقوم بتكرار البيانات ذات قيمة جديدة وتلحيمها إلى محتويات DGV السابقة .. أريد مسح المحتوى ثم أضف القيم .. هل هذا ممكن؟

هل كانت مفيدة؟

المحلول

إذا كان DataGridView مرتبط بأي بيانات DataSource، فسيتعين عليك تعيين DataGridView's DataSource الممتلكات إلى Nothing.

إذا كان DataGridView غير مرتبط بأي مصدر بيانات، فإن هذا الرمز سوف يقوم بالحيلة:

DataGridView.Rows.Clear()

نصائح أخرى

لاحظت الحالات غير المنحوبة أن:

DataGridView.Rows.Clear()

يترك مجموعة الأعمدة في المكان.

DataGridView.Columns.Clear()

.. سوف إزالة جميع الأعمدة والصفوف. إذا كنت تستخدم DGV غير منضم، واستخدام التالي تغيير الأعمدة، فقد لا تكون مسح الصفوف كافية. للحصول على رمز المكتبة مسح جميع الأعمدة قبل إضافة الأعمدة.

ربما استخدم هذا ...

DataGridView1.Rows.Clear()

لمسح الصفوف ثم rebind.

اتبع طريقة سهلة مثل هذا

افترض أن ta هو DataTable

ta.clear()
DataGridView1.DataSource = ta
DataGridView1.DataSource = Nothing

لا يمكنك ربط DataGridView بمجموعة فارغة (بدلا من NULL). التي تفعل الخدعة؟

لإزالة السجل القديم في DataGridView عند البحث عن نتيجة جديدة، مع الحدث Button_Click اكتب التعليمات البرمجية التالية،

me.datagreview1.datasource.clear ()

سيساعد هذا الرمز في إزالة السجل القديم في DataGridView.

لقد وجدت أن إعداد DataSource إلى NULL يزيل الأعمدة. هذا هو ما يعمل بالنسبة لي:

C #:

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

VB:

Call CType(myDataGrid.DataSource, DataTable).Rows.Clear()

بلدي DataGridView هو أيضا ملزمة إلى مصدر بيانات و myDataGridView.Columns.Clear() عملت بشكل جيد ولكن myDataGridView.Rows.Clear() لم. فقط FYI لأولئك الذين حاولوا .Rows.

لا تفعل أي شيء على DataGridView, ، فقط مسح مصدر البيانات. حاولت المقاصة myDataset.clear() الطريقة، ثم عملت.

لقد حصلت على هذا الرمز يعمل في نموذج 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

يجب إزالة الجدول من DataSet إذا كان DataGrid يرتبط ببعض DataTable. سيتم مسح GridView الخاص بك تلقائيا. لا طريقة أخرى.

[YourDatasetName].Tables.Clear()

كان لدي نفس المشكلة في تطهير محتوى GridView. DataSource الذي استخدمته كان DataTable ليس لديه أعمدة، وأضفت الأعمدة والصفوف برمجيا إلى DataTable. ثم ربط datagridview. حاولت الرمز المتعلق ب GridView مثل gridView.Rows.Clear(), gridView.DataSource = Nothing

لكنه لم يعمل بالنسبة لي. ثم حاول الرمز أدناه المتعلق ب DataTable قبل ربطه إلى DataGridView في كل مرة.

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

ويعمل بشكل جيد، لا النسخ المتماثل في DataGridView

1) إنشاء زر اسمه Clear.Inside إدراج TFHE التالي رمز DataGridViewer.datasource = لا شيء

2) في زر البحث الخاص بك يبدأ التعليمات البرمجية الخاصة بك بالبيان التالي

datagridviewer.datasource = dataset.table.

ملاحظة: بدلا من الجدول وضع الاسم الحقيقي لجدولك السابق: DataGridViewer.datasource = DataSet.client

عند إطعام المعلومات من استعلام SQL إلى DataGridView، يمكنك مسح DataGridView أولا قبل إعادة تحميله.

حيث قمت بتعريف DBDataset ك Datatable الجديد، يمكنني القيام بوضوح. يجب أن يكون DBDataset في بداية النموذج داخل شكل الطبقة العامة

Dim dbDataset AS New DataTable

ضمن مدونة لك الفرعية الخاصة، مكان

dbDataSet.Clear()

قد يكون لديك سيناريو مستخدم بحيث تريد الاحتفاظ بملزمة البيانات واضحة فقط 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 بناء على رقم Hydrant. انسخ هذا الرمز إلى النقطة التي تريد مسحها فيها DataGridView واستبدل قيمة "Hydrantnum" التي تعرفها ستسترد أي بيانات. سوف تضيح الشبكة. وعندما يحدد المستخدم في الواقع منشأة (في هذه الحالة، صنبور)، فإن الربط موجود لملء DataGridView بشكل مناسب.

إذا كان DataGridView مرتبط بأي بيانات DataSource،

DataGridView1.DataSource = Nothing
DataGridView1.DataBind()
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

إذا كان GridView (قل الاسم هو gvArchive) مرتبط بأي DataSource, ، سيقوم ما يلي بمسحها:

gvArchive.DataSource = Nothing

gvArchive.DataBind()

فقط اكتب هذا

DataGridView1.DataSource = ""

كان لدي نفس المشكلة: كنت ملزمة برمجيا gridview1 على طاولة SQL واحدة [dictonary] أو آخر [meny] ولكن عندما اخترت الجدول الثاني من بلدي radiobuttonlist1، كنت أحصل على خطأ (system.web.httpexception: الحقل أو الممتلكات مع العنوان [عنوان العمود الأول من الجدول المحدد سابقا] لم يتم العثور عليه في مصدر البيانات المحدد.) أي قول أن الأعمدة من الجدول المحدد الأول الذي تعذر العثور عليه. كل ما احتاجه القيام به هو إدراج:

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

ثم يأتي الفرعية الثانية الخاص بك:

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

وأخيرا يأتي راديوبوتون الخاص بك:

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

لإكمال، إليك رمز GRIDVIEW1 و RADIOBUTTONLID1 في ASPX.File المرتبط:

<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>

كل هذا يعمل بشكل جيد الآن.

الخطأ الذي تقوم به هو أنه يبدو أنك تستخدم كائن DataSet لتخزين بياناتك. في كل مرة تستخدم فيها التعليمات البرمجية التالية لوضع البيانات في DataSet تقوم بإضافة بيانات إلى البيانات الموجودة بالفعل في مجموعة البيانات الخاصة بك.

myDataAdapter.Fill(myDataSet)

إذا قمت بتعيين الجدول في مجموعة بياناتك إلى كائن DataGridView في برنامجك من خلال التعليمات البرمجية التالية، فستحصل على نتائج مكررة لأنك لم تقم بإزالة البيانات التي تقيم بالفعل في DataSet وفي جدول البيانات الخاص بك.

myDataGridView.DataSource = myDataSet.Tables(0)

لتجنب تكرار البيانات، يجب عليك استدعاء طريقة واضحة على كائن DataSet الخاص بك.

myDataSet.clear()

ثم قم بتعيين الجدول في DataSet الخاص بك إلى كائن 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

استخدم هذا الرمز حيث تريد تطبيق أمر واضح DataGridView

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

سيقوم هذا الرمز بمسح DataGridView و WIL إيقاف النسخ الاحتياطي للبيانات عند ملء البيانات من قاعدة البيانات.

يمكنك القيام به بهذه الطريقة:

DataGridView1.Enable = false
DataGridView1.DataSource = Nothing
DataGridView1.Enable = true

للحصول على بيانات عرض الشبكة التي يجب عليك مسح DataSet أو DataTable

يمكنني استخدام هذا الرمز أوضح بيانات عرض الشبكة حتى إذا أعدم مرارا وتكرارا أنه سيعمل على ذلك، فسوف يعمل مثالا باهظا ميمدا جديدا جديدا ميمدا كيمتد جديد oledbdataadapter da dar dar as new oledbdatareader dim dt ك datatable الجديد إذا (con.State <> 1) ثم con.open () نهاية إذا DT.Clear () "مسح البيانات ()" عرض البيانات في كل مرة إلى البيانات الطازجة cmd.connection = con cmd.commandtext = "حدد * من المستخدمين" da.selectcommand = cmd da.fill ( DT) datagridview1.datasource = dt datagridview1.visible = صحيح

    cmd.Dispose()
    con.Close()

يمكنك القيام بذلك فقط من خلال السطرين التاليين:

DataGridView1.DataSource=Nothing
DataGridView1.DataBind()

يمكنك أيضا تجربة هذا الرمز إذا كنت ترغب في مسح جميع البيانات في DataGridView الخاص بك

DataGridView1.DataSource.Clear()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top