2012-10-30 20 views
31

मैं कॉम्बोबॉक्स में चयनित आइटम के आधार पर डेटाग्रिड व्यू को पॉप्युलेट करने का प्रयास कर रहा हूं, मेरे पास यह हिस्सा काम कर रहा है।डेटा ग्रिड व्यू को कैसे साफ़ करें

हालांकि, मुझे अंत में जोड़ने के बजाय नए आइटम से नया डेटा जोड़ने से पहले ग्रिड को साफ़ करने में सक्षम होना चाहिए।

आइटम जोड़ने से पहले मैं डेटाग्रिड व्यू को कैसे साफ़ करूं?

+2

डेटा नियंत्रण करने के लिए बाध्य है:

यहाँ मेरी विधि है? कोड कृपया! – davenewza

+0

[DataGridView.Clear()] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/3744882/datagridview-clear) –

उत्तर

66

सबसे पहले, अशक्त डेटा स्रोत

dataGridView1.Rows.Clear(); 
dataGridView1.Refresh(); 

यदि यह databound है तो प्रयास करें:

this.dataGridView.DataSource = null; 

तो पंक्तियों स्पष्ट:

this.dataGridView.Rows.Clear(); 

फिर नई सूची में डेटा स्रोत सेट:

this.dataGridView.DataSource = this.GetNewValues(); 
+5

क्या होता है यदि मैं डेटा स्रोत को शून्य नहीं करता हूं? – Patrick

5
DataGrid.DataSource = null; 
DataGrid.DataBind(); 
+1

लघु एन सरल। काम किया –

+0

मेरे मामले में, साफ़() किसी कारण से मेरे लिए उपलब्ध नहीं था। मैंने इस कोड का इस्तेमाल किया और यह पूरी तरह से काम किया। –

6

आप इस तरह से DataGridView साफ कर सकते हैं इस

dataGridView1.Rows.Clear() // If dgv is bound to datatable 
dataGridView1.DataBind(); 
1
dataGridView1.Rows.Clear(); 
dataGridView1.Refresh(); 
2

आप अपने डेटा ग्रिड के अशक्त के रूप में डेटा स्रोत प्रदान कर सकते हैं और फिर इसे rebind।

dg.DataSource = null; 
dg.DataBind(); 
+0

यह डीजीवी नहीं डाटाग्रिड है। आसान गलती - मुझे पता है कि मैंने इसे पर्याप्त समय दिया है। – bendecko

0

DataGridView ताज़ा और ताज़ा datatable

dataGridView1.Refresh(); 
datatable.Clear(); 
0
datatable.Clear(); 
dataGridView1.DataSource = datatable; 
+3

भले ही उत्तर सही था, मैं हमेशा थोड़ा सा व्याख्या शामिल करता हूं क्योंकि उपयोगकर्ता इसे आसानी से नहीं देख सकता है। – nKn

-5

समाधान है:

while (dataGridView1.RowCount > 1) 
{ 
    dataGridView1.Rows.RemoveAt(0); 
} 
+2

एक लूपिंग समाधान उपयुक्त नहीं है ... –

1

आप सभी हेडर के साथ-साथ डेटा, उदाहरण के लिए साफ़ करना चाहते हैं यदि आप अलग-अलग फ़ील्ड के साथ 2 पूरी तरह से अलग डेटाबेस के बीच स्विच कर रहे हैं, इसलिए मुझे विभिन्न कॉलम और कॉलम हेडर मिलते हैं काम करने के लिए निम्नलिखित। अन्यथा जब आप स्विच करते हैं तो आपके पास ग्रिड में दिखाए गए दोनों डेटाबेस से कॉलम/फ़ील्ड होते हैं।

dataTable.Dispose();//get rid of existing datatable 
dataTable = new DataTable();//create new datatable 

datagrid.DataSource = dataTable;//clears out the datagrid with empty datatable 
//datagrid.Refresh(); This does not seem to be neccesary 

dataadapter.Fill(dataTable); //assumming you set the adapter with new data    
datagrid.DataSource = dataTable; 
8

यह एक डेटा स्रोत के लिए बाध्य कर रहा है -

dataGridView.DataSource=null; 
dataGridView.Rows.Clear(); 

मेरे लिए काम किया।

+0

मुझे पता है कि यह साढ़े सालों से देर हो चुकी है, लेकिन क्या होगा यदि डेटाग्रिडव्यू डेटा स्रोत से बंधे न हों? डेटाग्रिड को रीफ्रेश करने से पहले मैं इसे कैसे साफ़ करूं? –

0
private void ClearGrid() 
{  
    if(this.InvokeRequired) this.Invoke(new Action(this.ClearGrid)); 

    this.dataGridView.DataSource = null; 
    this.dataGridView.Rows.Clear(); 
    this.dataGridView.Refresh(); 
} 
4

आप न केवल डाटा साफ़ करना चाहते हैं, लेकिन यह भी comboboxes, स, कोशिश

dataGridView.Columns.Clear(); 
-1

समाधान है:

dataGridView1.Rows.RemoveAt(0); 

ग्रिड साफ़ करता है और स्तंभों को बरकरार रखता है।

+1

यह केवल 1 पंक्ति को हटा देगा। ग्रिड उपयोग विधि को साफ़ करने के लिए 'dataGridView1.Rows.Clear(); ' – ClearLogic

2

आप यह अगला निर्देश ले सकते हैं और परफॉर्मेंस की कमी के साथ काम करेंगे।यदि आप इसका प्रभाव देखना चाहते हैं, तो 2 अगले निर्देशों (तकनीकी रूप से सिमिलर्स) में से एक को रखें जहां आपको डेटाग्रिड व्यू को {try catch (...) {} में अवरुद्ध करने की आवश्यकता है, अंत में ब्लॉक करें और प्रतीक्षा करें कि क्या होता है।

 while (dataGridView1.Rows.Count > 1) 
    { 
     dataGridView1.Rows.RemoveAt(0); 
    } 

    foreach (object _Cols in dataGridView1.Columns) 
    { 
     dataGridView1.Columns.RemoveAt(0); 
    } 

आप इस कार्य में सुधार है, लेकिन इसके लिए पर्याप्त नहीं है, वहाँ क्योंकि colums कि DataGridView वस्तु में रहता है की एक DataGridView पुनर्स्थापित करने के लिए एक समस्या है। आखिर में मेरा सुझाव है कि, मैंने अपने घर अभ्यास में सबसे अच्छा तरीका लागू किया है, इस ग्रिड व्यू को पंक्तियों, स्तंभों के साथ फ़ाइल के रूप में संभालना है: पंक्तियों और स्तंभों के बीच मिलान के आधार पर एक रिकॉर्ड संग्रह। यदि आप सुधार कर सकते हैं, तो अपनी पसंद लें ए) या बी): foreach या जबकि।

 //(a): With foreach 
    foreach (object _Cols in dataGridView1.Columns) 
    { 
     dataGridView1.Columns.RemoveAt(0); 
    } 

    foreach(object _row in dataGridView1.Rows){ 
     dataGridView1.Rows.RemoveAt(0); 
    } 

    //(b): With foreach 
    while (dataGridView1.Rows.Count > 1) 
    { 
     dataGridView1.Rows.RemoveAt(0); 
    } 
    while (dataGridView1.Columns.Count > 0) 
    { 
     dataGridView1.Columns.RemoveAt(0); 
    } 

ठीक है, एक recomendation कभी अपने जीवन में कॉलम पहले उसे हटा नहीं के रूप में, क्रम में कॉलम के बाद पंक्तियों से पहले है, क्योंकि तार्किक कॉलम जहां पहली बार बनाया और फिर rows.It मामले में एक दंड होगा सही analisys के।

 foreach (object _Cols in dataGridView1.Columns) 
    { 
     dataGridView1.Columns.RemoveAt(0); 
    } 
    foreach (object _row in dataGridView1.Rows) 
    { 
     dataGridView1.Rows.RemoveAt(0); 
    } 
    while (dataGridView1.Rows.Count > 1) 
    { 
     dataGridView1.Rows.RemoveAt(0); 
    } 

    while (dataGridView1.Columns.Count > 0) 
    { 
     dataGridView1.Columns.RemoveAt(0); 
    } 

फिर, इसे किसी फ़ंक्शन या विधि के अंदर रखें।

private void ClearDataGridViewLoopWhile() 
{   
    while (dataGridView1.Rows.Count > 1) 
    { 
     dataGridView1.Rows.RemoveAt(0); 
    } 

    while (dataGridView1.Columns.Count > 0) 
    { 
     dataGridView1.Columns.RemoveAt(0); 
    } 
} 

private void ClearDataGridViewForEach() 
{ 
    foreach (object _Cols in dataGridView1.Columns) 
    { 
     dataGridView1.Columns.RemoveAt(0); 
    } 
    foreach (object _row in dataGridView1.Rows) 
    { 
     dataGridView1.Rows.RemoveAt(0); 
    } 
} 

अंत में, अपने नए कार्य ClearDataGridViewLoopWhile फोन(); या ClearDataGridViewForEach(); जहां आपको इसका उपयोग करने की आवश्यकता है, लेकिन जब आप क्वेरी कर रहे हैं और सेवरॉल टेबल पर बदल रहे हैं तो इसकी अनुशंसा की जाती है जो शिकायत में हेडर नामों के साथ लोड होगा। लेकिन अगर आप हेडर को संरक्षित करना चाहते हैं तो यहां एक समाधान दिया गया है।

-2

यह

'int numRows = dgbDatos.Rows.Count; 

      for (int i = 0; i < numRows; i++) 
      { 
       try 
       { 

        int max = dgbDatos.Rows.Count - 1; 
        dgbDatos.Rows.Remove(dgbDatos.Rows[max]); 
        btnAgregar.Enabled = true; 
       } 
       catch (Exception exe) 
       { 
        MessageBox.Show("No se puede eliminar " + exe, "", 
        MessageBoxButtons.OK, MessageBoxIcon.Information); 
       } 
      }` 
+0

एक समय में एक को हटाएं, जब आप साफ़() को ट्रेवर के रूप में उपयोग कर सकते हैं? लूप चलाने के हर बार एक बटन को सक्षम क्यों करें? बटन सक्षम उदाहरण से हटा दिया जाना चाहिए था, और लूप के बाहर पहली जगह ले जाया जाना चाहिए था। – nivs1978

-1
YourGrid.Items.Clear(); 
YourGrid.Items.Refresh(); 
0

मेरे लिए काम कर रहा है होने एक डेटा ग्रिड आप एक तरीका है जिसके अपने डेटा ग्रिड स्वरूपण है होना आवश्यक है। यदि आप डेटाग्रिड को साफ़ करना चाहते हैं तो आप बस विधि को याद करते हैं।

public string[] dgv_Headers = new string[] { "Id","Hotel", "Lunch", "Dinner", "Excursions", "Guide", "Bus" }; // This defined at Public partial class 


    private void SetDgvHeader() 
    { 
     dgv.Rows.Clear(); 
     dgv.ColumnCount = 7; 
     dgv.RowHeadersVisible = false; 
     int Nbr = int.Parse(daysBox.Text); // in my method it's the textbox where i keep the number of rows I have to use 
     dgv.Rows.Add(Nbr); 
     for(int i =0; i<Nbr;++i) 
      dgv.Rows[i].Height = 20; 
     for (int i = 0; i < dgv_Headers.Length; ++i) 
     { 
      if(i==0) 
       dgv.Columns[i].Visible = false; // I need an invisible cells if you don't need you can skip it 
      else 
       dgv.Columns[i].Width = 78; 
      dgv.Columns[i].HeaderText = dgv_Headers[i]; 
     } 
     dgv.Height = (Nbr* dgv.Rows[0].Height) + 35; 
     dgv.AllowUserToAddRows = false; 
    } 

DGV DataGridView का नाम है

संबंधित मुद्दे