2008-11-24 11 views
7

हटाएं मैंने 2 अलग-अलग सर्वरों से एक डेटाटेबल पॉप्युलेट किया है। मैं समायोजन करने में सक्षम हूं जहां मेरी लंबाई> 0, मैं जो करना चाहता हूं वह उन पंक्तियों को हटा देता है जो हिट नहीं करते हैं। यहां मेरा सारांश है कि मेरे पासएक डेटाटेबल के माध्यम से लूपिंग और पंक्ति

DataRow[] dr = payments.dtPayments.Select(myselect); 

if (dr.Length > 0) 
{ 
    for (int a = 0; a < dr.Length; a++) 
    { 
     if (thisOption == true) 
     dr[0].Delete(); 
     else if (otherOption == true) 
     { 
     dr[0]["Date"] = myDataReader["date"].ToString().Trim(); 
     dr[0]["Pay"] = payTypeName(myDataReader["ccdsrc"].ToString() 
                  .Trim()); 
     } 
    } 
} 
if (dr.Length == 0) 
{       
    if (LastOption == true) 
    { 
    //DataRow should be removed 
    }       
} 

उत्तर

4

यदि डॉ। लम्बाई शून्य है, तो आपके चयन ने किसी भी पंक्ति को वापस नहीं किया है। यदि आप उन पंक्तियों को हटाना चाहते हैं जो आपके मानदंड से मेल नहीं खाते हैं, तो मैं इसे एक अलग प्रकार की क्वेरी के रूप में लागू करूंगा। यह भी हो सकता है कि मैं आपके प्रश्न को पूरी तरह गलत समझ रहा हूं। क्या आप अपना एसक्यूएल दिखाने के लिए अपना प्रश्न अपडेट कर सकते हैं और संकेत दे सकते हैं कि कोड नमूने में आपको समस्या क्यों है: लूप के अंदर या लूप के बाद जहां आपकी टिप्पणी है?

+0

आप सही हैं। मुझे एहसास है कि मैं किसी भी पंक्ति को वापस नहीं कर रहा हूं। मैंने जो किया वह एक नया डेटासेट बना रहा था और जो मैंने पाया था उसके साथ पंक्तियों को पॉप्युलेट कर दिया था। धन्यवाद –

1

क्या आपने इसे आजमाया है?

payments.dtPayments.Rows.Remove (डॉ)

+0

मैंने किया, और मैंने इसमें और अधिक देखा। मैंने पहले डॉ [0] .delete था, मैंने जो सुझाव दिया था (दोनों डॉ और डॉ [0]) और त्रुटि सूचकांक सरणी की सीमाओं के बाहर था मेरी त्रुटि है। क्या इसे सही करने का कोई तरीका है? –

18

मुझे यकीन है कि मैं पूरी तरह से अपने प्रश्न समझ में नहीं कर रहा हूँ लेकिन ऐसा लगता है कि आप संग्रह से किसी प्रविष्टि को हटाने के लिए, जबकि आप अभी भी इस पर पाशन कर रहे हैं की कोशिश करो। (जो एक सरणी सूचकांक त्रुटि का कारण होगा)

आप प्रत्येक प्रविष्टि आप एक नया संग्रह में हटा सकते हैं और फिर पुराने संग्रह से सभी नई प्रविष्टियाँ निकालना चाहते हैं के लिए एक संदर्भ को बचाने चाहिए:

DataRow[] dr = payments.dtPayments.Select(myselect); 
List<DataRow> rowsToRemove = new List<DataRow>(); 

for (int a = 0; a < dr.Length; a++) { 
    if(/* You want to delete this row */) { 
     rowsToRemove.Add(dr[a]); 
    } 
} 

foreach(var dr in rowsToRemove) { 
    payments.dtPayments.Rows.Remove(dr); 
} 
+0

आप प्रतिभाशाली हैं! –

2

आप की जरूरत है लूप के बाहर एक डाटरो बनाने के लिए, फिर जब आप उस पंक्ति तक पहुंच जाते हैं जिसे आप निकालना चाहते हैं तो इसे उस पंक्ति में असाइन करें जिसे आपने बाहर बनाया था। और लूप तोड़ो। फिर लूप के नीचे आप इसे हटा सकते हैं।

DataRow r = null; 
foreach(DataRow row in table.Rows) 
{ 
    if(condition==true) 
    { 
     r = row; 
     break; 
    } 
} 

table.Rows.Remove(r); 
1

आप कई पंक्तियों को हटाने के लिए (int int = = पंक्तियों। Length-1; x> -1; x--) के लिए संग्रह के माध्यम से लूप कर सकते हैं यह सुनिश्चित करने के लिए कि आप बाध्य त्रुटियों से सूचकांक प्राप्त नहीं करेंगे ।

+0

मुझे यह डबल लूप से बहुत बेहतर पसंद है। यह हमेशा मेरी पसंदीदा विधि है। – Richard

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