दिलचस्प पोस्ट
d3 सर्कल में पाठ जोड़ें संदर्भ चर वस्तु में शाब्दिक? गो प्रोजेक्ट लेआउट का एक समझदार तरीका क्या है आंतरिक सीएमडी.एक्सई कमांड द्वारा निर्धारित ERRORLEVEL मान क्या हैं? क्या ScrollView के अंदर एक ViewPager होना संभव है? कैसे बाइट सरणी को स्ट्रिंग में परिवर्तित करें पायथन: (समान) तारों के एक सेट से उपसर्ग निर्धारित करें JavaScript में सरणी से तत्व कैसे निकालें? एक एंड्रॉइड व्यू कैसे बनाएं जो स्वाइप / फ्लिंग पर दृश्यों के बीच फ़्लिप करता है WPF / MVVM लाइट टूलकिट के साथ विंडो समापन ईवेंट को संभालना VBA 6.0 और VBA 7.0 के बीच अंतर क्या हैं? उलटा फिबोनासी एल्गोरिदम? PHP: कुकी डोमेन / उपडोमेन नियंत्रण स्ट्रिंग से एचटीएमएल टैग स्ट्रिप करें टोमैट की शुरुआत नेटबींस में विफल रही

कैसे DataGridView में प्रोग्रामिंग सेल मूल्य निर्धारित करने के लिए?

मेरे पास एक डाटाग्रीड दृश्य है कुछ कोशिकाओं को अपने सीरियल पोर्ट से डेटा प्राप्त होता है: मैं डेटा को सेल में घुमाएगा, और इसे अंतर्निहित बाउंड ऑब्जेक्ट को अपडेट करना होगा।

मैं इस तरह से कुछ कोशिश कर रहा हूँ:

SetValueFromSerial (decimal newValue) { dataGridView.CurrentCell.Value = newValue; } 

स्ट्रिंग का उपयोग करने में मदद नहीं करता है:

  dataGridView.CurrentCell.Value = newValue.ToString (); 

दोनों ही मामलों में, मुझे ग्रिड में कुछ नहीं दिखाई देता है, और मूलभूत मूल्य अपरिवर्तित है।

मैंने Google किया और यहां खोज की, लेकिन मुझे कुछ नहीं मिला। (मैं कुछ याद किया हो सकता है, शायद कुछ स्पष्ट है, लेकिन मैं पूरी तरह आलसी नहीं हूँ।)

Solutions Collecting From Web of "कैसे DataGridView में प्रोग्रामिंग सेल मूल्य निर्धारित करने के लिए?"

यदि डेटाग्रिड दृश्य डेटाबेंड है, तो आपको सीधे सेल की सामग्री को संशोधित नहीं करना चाहिए। इसके बजाय, आपको डेटाबाउंड ऑब्जेक्ट को संशोधित करना चाहिए। आप DataBoundItem के DataBoundItem के माध्यम से उस ऑब्जेक्ट तक पहुंच सकते हैं:

 MyObject obj = (MyObject)dataGridView.CurrentRow.DataBoundItem; obj.MyProperty = newValue; 

नोट करें कि बाउंड ऑब्जेक्ट को INotifyPropertyChanged को लागू करना चाहिए ताकि परिवर्तन DataGridView में प्रतिबिंबित हो

 dataGridView1[1,1].Value="tes"; 

यदि आप किसी कारण से डेटाटाबेड ऑब्जेक्ट को संशोधित नहीं करना चाहते हैं (उदाहरण के लिए आप अपनी ग्रिड में कुछ दृश्य दिखाना चाहते हैं, लेकिन आप इसे डेटा स्रोत ऑब्जेक्ट के हिस्से के रूप में नहीं चाहते हैं), तो आप ऐसा कर सकते हैं:

1. मैन्युअल रूप से कॉलम जोड़ें:

  DataGridViewColumn c = new DataGridViewColumn(); DataGridViewCell cell = new DataGridViewTextBoxCell(); c.CellTemplate = cell; c.HeaderText = "added"; c.Name = "added"; c.Visible = true; dgv.Columns.Insert(0, c); 

2. DataBindingComplete घटना में ऐसा कुछ करें:

 foreach (DataGridViewRow row in dgv.Rows) {if (row.Cells[7].Value.ToString()=="1") row.Cells[0].Value = "number one"; } 

(सिर्फ एक बेवकूफ उदाहरण)

लेकिन याद रखना कि यह डाटाबाइंडिंग पूर्ण होने में है, अन्यथा मूल्य रिक्त रहेगा

क्या आप डेटाग्रिड दृश्य को रीफ़्रेश करते हैं?

 datagridview.refresh(); 

मुझे एसक्यूएल-डेटा एडाप्टर के साथ डेटा अपडेट करने और इसी तरह की समस्या है

निम्नलिखित मेरे लिए ठीक काम कर रहा है

 mydatgridview.Rows[x].Cells[x].Value="test" mydatagridview.enabled = false mydatagridview.enabled = true 

मैंने समाधान की खोज की है कि मैं एक नई पंक्ति कैसे डाल सकता हूं और Excel के अंदर की कोशिकाओं के अलग-अलग मानों को कैसे सेट कर सकता हूँ। मैं निम्नलिखित कोड के साथ हल:

 dataGridView1.ReadOnly = false; //Before modifying, it is required. dataGridView1.Rows.Add(); //Inserting first row if yet there is no row, first row number is '0' dataGridView1.Rows[0].Cells[0].Value = "Razib, this is 0,0!"; //Setting the leftmost and topmost cell's value (Not the column header row!) dataGridView1[1, 0].Value = "This is 0,1!"; //Setting the Second cell of the first row! 

ध्यान दें:

  1. पहले मैंने डिजाइन मोड में कॉलम डिज़ाइन किए हैं I
  2. मैंने पंक्ति हेडर की दृश्यता को डीटैग्रिड दृश्य की संपत्ति से झूठी झूठी झूठी है।
  3. आखिरी पंक्ति को समझना महत्वपूर्ण है: जब आप सीधे डेटाग्रिड दृश्य की अनुक्रमणिका दे रहे हैं, तो पहला नंबर सेल नंबर है, दूसरा वाला पंक्ति संख्या है! इसे याद रखना!

आशा है कि इससे आपकी सहायता हो सकती है

इस तरह से प्रयास करें:

 dataGridView.CurrentCell.Value = newValue; dataGridView.EndEdit(); dataGridView.CurrentCell.Value = newValue; dataGridView.EndEdit(); 

दो बार लिखना होगा …

निम्नलिखित कार्य मैं गलत हो सकता है, लेकिन एक String मान जोड़ने से डेटाग्रीड दृश्य सेल (मैं प्रयोग नहीं किया था या किसी भी हैक्स की कोशिश नहीं की थी) के अनुरूप नहीं है।

 DataGridViewName.Rows[0].Cells[0].Value = 1; 

@ थॉमस की तरह, आप जिस तत्व को बदलना चाहते हैं, उसे INOTifyPropertyChanged को लागू करना होगा। लेकिन, डेटा स्रोत भी महत्वपूर्ण है यह बाध्यकारी सूची होना चाहिए, जिसे आप सूची से आसानी से बना सकते हैं।

यह मेरा उदाहरण है – डेटा स्रोत पहले डाटाटेबल पर है, जो मैं सूची में स्थानांतरित करता हूं और फिर बाध्यकारी सूची बनाता हूं। तब मैं बाइंडिंग स्रोत बनाता हूं और बाइंडिंग स्रोत को BindingSource से डेटास्रोत के रूप में उपयोग करता हूं। आखिरकार, डेटाग्रीस से डाटासॉर इस बाइंडिंग स्रोत का उपयोग करता है

  sp_Select_PersonTableAdapter adapter = new sp_Select_PersonTableAdapter(); DataTable tbl = new DataTable(); tbl.Merge(adapter.GetData()); List<Person> list = tbl.AsEnumerable().Select(x => new Person { Id = (Int32) (x["Id"]), Ime = (string) (x["Name"] ?? ""), Priimek = (string) (x["LastName"] ?? "") }).ToList(); BindingList<Person> bindingList = new BindingList<Person>(list); BindingSource bindingSource = new BindingSource(); bindingSource.DataSource = bindingList; dgvPerson.DataSource = bindingSource; 

यह भी बहुत महत्वपूर्ण है: प्रत्येक वर्ग के सदस्य सेटर को ऑनप्राप्टीटी चेंगेड () को कॉल करना चाहिए। इसके बिना, यह काम नहीं करेगा तो, मेरी कक्षा इस तरह दिखती है:

 public class Person : INotifyPropertyChanged { private int _id; private string _name; private string _lastName; public int Id { get { return _id; } set { if (value != _id) { _id = value; OnPropertyChanged(); } } } public string Name { get { return _name; } set { if (value != _name) { _name = value; OnPropertyChanged(); } } } public string LastName { get { return _lastName; } set { if (value != _lastName) { _lastName= value; OnPropertyChanged(); } } } public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); } } 

इस विषय पर अधिक: http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx

 private void btn_Addtoreciept_Click(object sender, EventArgs e) { serial_number++; dataGridView_inventory.Rows[serial_number - 1].Cells[0].Value = serial_number; dataGridView_inventory.Rows[serial_number - 1].Cells[1].Value =comboBox_Reciept_name.Text; dataGridView_inventory.Rows[serial_number - 1].Cells[2].Value = numericUpDown_recieptprice.Value; dataGridView_inventory.Rows[serial_number - 1].Cells[3].Value = numericUpDown_Recieptpieces.Value; dataGridView_inventory.Rows[serial_number - 1].Cells[4].Value = numericUpDown_recieptprice.Value * numericUpDown_Recieptpieces.Value; numericUpDown_RecieptTotal.Value = serial_number; } 

पहली बार यह अच्छी तरह से चला जाता है, लेकिन दूसरी बार दबाने से मुझे त्रुटि मिलती है "इंडेक्स श्रेणी से बाहर था। गैर-नकारात्मक और संग्रह के आकार से कम होना चाहिए। पैरामीटर का नाम: इंडेक्स" परन्तु जब मैं सेल पर क्लिक करता हूं तो दूसरी पंक्ति दिखाई देती है और फिर यह अगली पंक्ति के लिए काम करता है, और जारी रखता है …

यदि DataGridView को DataSource = x (यानी databound) द्वारा DataSource = x किया गया है, तो आपको बाध्य डेटा को बदलना होगा, न कि डेटाग्रिड दृश्य कोशिकाओं को स्वयं।

ज्ञात पंक्ति या स्तंभ से उस डेटा को प्राप्त करने का एक तरीका इस प्रकार है:

 (YourRow.DataBoundItem as DataRowView).Row['YourColumn'] = NewValue; 

मैं एक ही समस्या में आया और इसे VB.NET के लिए निम्नलिखित के रूप में हल किया। यह। NET फ्रेमवर्क है ताकि आपको अनुकूलित करना चाहिए। अपने समाधान की तुलना करना चाहता था और अब मैं देख रहा हूं कि कोई भी इसे अपने तरीके से हल नहीं कर रहा है।

एक फ़ील्ड घोषणा करें

Private _currentDataView as DataView

इसलिए सभी पंक्तियों के माध्यम से पाशन और एक सेल के लिए खोज करने वाला मान जिसे मैं जानता हूं वह सेल के बगल में है जो मेरे लिए काम बदलना चाहता है

 Public Sub SetCellValue(ByVal value As String) Dim dataView As DataView = _currentDataView For i As Integer = 0 To dataView.Count - 1 If dataView(i).Row.Item("projID").ToString.Equals("139") Then dataView(i).Row.Item("Comment") = value Exit For ' Exit early to save performance End If Next End Sub 

ताकि आप इसे बेहतर ढंग से समझ सकें। मुझे पता है कि कॉलमनाम "प्रोजेआईडी" 13 9 है। जब तक मैं इसे खोज नहीं करता हूं, तब तक मैं लूप और उसके बाद "कॉलमनामफ़ेल" का मान मेरे मामले में बदल सकता हूं "टिप्पणी"। मैं इसे रनटाइम पर जोड़े गए टिप्पणियों के लिए उपयोग करता हूं

आँकड़ों का खाका

वीबी में आप इसका उपयोग कर सकते हैं

 Dim selectedRow As DataRowView selectedRow = dg.Rows(dg.CurrentCell.RowIndex).DataBoundItem selectedRow("MyProp") = "myValue" dg.NotifyCurrentCellDirty(True) 

आखिरी पंक्ति के लिए सईद सर्पोशन के लिए धन्यवाद

मैंने बहुत सारे तरीकों की कोशिश की, और केवल एक ही काम किया जो अपडेटकेलवैल्यू था:

 dataGridView.Rows[rowIndex].Cells[columnIndex].Value = "New Value"; dataGridView.UpdateCellValue(columnIndex, rowIndex); 

मुझे उम्मीद है कि मैंने मदद की है =)