2012-01-18 18 views
16

मैं वीएस -2010 का उपयोग करता हूं और फिर डिज़ाइन दृश्य के लिए सदस्य डेटाग्रिडव्यू खींचें और छोड़ देता हूं। उसके बाद मैं नाम सदस्य टेक्स्टफील्ड को डिज़ाइन दृश्य में खींच और छोड़ देता हूं और फिर संपादित करने और सहेजने का प्रयास करता हूं। यह ठीक से काम करता है।WinForm बाध्यकारी रेडियो बटन

और फिर मैं डिज़ाइन दृश्य में सेक्स रेडियो बटन खींच और छोड़ देता हूं। लेकिन बाध्यकारी यह काम नहीं करता है।

मैं इस स्थिति में बाध्यकारी कैसे कर सकता हूं?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace Test7 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void memberBindingNavigatorSaveItem_Click(object sender, EventArgs e) 
     { 
      this.Validate(); 
      this.memberBindingSource.EndEdit(); 
      this.tableAdapterManager.UpdateAll(this.dbDataSet); 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      // TODO: This line of code loads data into the 'dbDataSet.Member' table. You can move, or remove it, as needed. 
      this.memberTableAdapter.Fill(this.dbDataSet.Member); 
      // TODO: This line of code loads data into the 'dbDataSet.Member' table. You can move, or remove it, as needed. 
      this.memberTableAdapter.Fill(this.dbDataSet.Member); 

     } 


     private void memberBindingNavigatorSaveItem_Click_1(object sender, EventArgs e) 
     { 
      this.Validate(); 
      this.memberBindingSource.EndEdit(); 
      this.tableAdapterManager.UpdateAll(this.dbDataSet); 

     } 
    } 
} 

enter image description here

+0

सदस्यबाइंडिंगविविगेटर SaveItem_Click और सदस्य BindingNavigatorSaveItem_Click_1 के बीच क्या अंतर है? क्या मैं कुछ भूल रहा हूँ? हालांकि पोस्ट कोड और स्क्रीनशॉट पोस्ट करने के लिए समय लेने के लिए +1। – CptSupermrkt

+0

उन दो घटनाओं के बीच कोई अंतर नहीं है, आपने एक नया क्लिक ईवेंट बनाया है जब पहले से ही कोई ईवेंट मौजूद है। –

+0

हाँ, कोई फर्क नहीं पड़ता। –

उत्तर

14

यहाँ दो संभव समाधान हैं।


स्वरूप बाध्यकारी और पार्स घटनाओं

Binding वर्ग Format और Parse घटनाओं के रूप में बाध्य डेटा के परिवर्तनों ऑन-द-मक्खी के लिए निर्मित एक सुविधा है।

यहां बताया गया है कि आप केवल "पुरुष" रेडियोबूटन के साथ उन घटनाओं का उपयोग कैसे करेंगे। बनाएं कोड में बाध्यकारी, डिजाइनर में नहीं:

// create binding between "Sex" property and RadioButton.Checked property 
var maleBinding = new Binding("Checked", bindingSource1, "Sex"); 
// when Formatting (reading from datasource), return true for M, else false 
maleBinding.Format += (s, args) => args.Value = ((string)args.Value) == "M"; 
// when Parsing (writing to datasource), return "M" for true, else "F" 
maleBinding.Parse += (s, args) => args.Value = (bool)args.Value ? "M" : "F"; 
// add the binding 
maleRb.DataBindings.Add(maleBinding); 

// you don't need to bind the Female radiobutton, just make it do the opposite 
// of Male by handling the CheckedChanged event on Male: 
maleRb.CheckedChanged += (s, args) => femaleRb.Checked = !maleRb.Checked; 

परिकलित प्रॉपर्टी

एक और दृष्टिकोण अपने डेटा स्रोत के लिए एक गणना संपत्ति जोड़ने के लिए है: आप

public bool IsMale 
{ 
    get { return Sex == "M"; } 
    set 
    { 
     if (value) 
      Sex = "M"; 
     else 
      Sex = "F"; 
    } 
} 

अब अपने डेटासोर्स पर इस संपत्ति के लिए पुरुष रेडियोबटन को बस बांध सकते हैं (बस इस संपत्ति को ग्रिड में न दिखाएं)।

और फिर आप महिला इतनी तरह हुक कर सकते हैं पुरुष रहे हैं:

maleRb.CheckedChanged += (s, args) => femaleRb.Checked = !maleRb.Checked; 
+1

मैं समाधान # 1 का प्रयास करता हूं और यदि मैं सेट करता हूं तो सभी रिकॉर्ड महिला हैं, तो कोई भी रेडियो बटन चेक नहीं करेगा। [http://i.imgur.com/zo2KF.jpg] –

+0

समाधान # 2, मैं कोड कहां जोड़ सकता हूं? –

+0

मैंने बाध्यकारी मादा बटन भी हल किया। –

2

जबकि मुझे पता है यह पहले से ही उत्तर दिया गया है, मैंने सोचा कि मैं एक विकल्प है कि डिजाइन समय बाध्यकारी क्षमता देता है प्रदान करेगा।

एक नया कस्टम रेडियो बटन ऑब्जेक्ट बनाएं। यह निम्नलिखित कोड के साथ किया जाता है।

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace MSLabExample 
{ 
    class RadioButtonBind : RadioButton 
    { 
     private string _selectValue = string.Empty; 
     public string SelectValue 
     { 
      get { return _selectValue; } 
      set 
      { 
       if (value == Text) Checked = true; 
       else Checked = false; 
       _selectValue = value; 
      } 
     } 

     public RadioButtonBind() 
     { 
      this.CheckedChanged += new EventHandler(RadioButtonBind_CheckedChanged); 
      this.TextChanged += new EventHandler(RadioButtonBind_TextChanged); 

     } 
     void RadioButtonBind_TextChanged(object sender, EventArgs e) 
     { 
      if (Checked) _selectValue = Text; 
     } 

     void RadioButtonBind_CheckedChanged(object sender, EventArgs e) 
     { 
      if (Checked) _selectValue = Text; 
     } 
    } 
} 

ऊपर नियंत्रण की मूल अवधारणा को एक स्ट्रिंग मान कि बाध्य किया जा सकता है और खुद जांच करेगा कि बाध्य स्ट्रिंग मान रेडियो बटन पाठ के बराबर है उपयोग करने के लिए है।

रेडियो बटन टेक्स्ट का उपयोग करके, यह उचित चेक किए गए मान की आसान समझ की अनुमति देता है, और केवल रेडियो बटन टेक्स्ट को बदलकर SelectValue को अपडेट करने की अनुमति देता है। रेडियो बटन को संशोधित करते समय कोई अतिरिक्त कोड की आवश्यकता नहीं है।

अब आप एक ही समूह के सभी रेडियो बटनों के लिए कुछ स्ट्रिंग प्रॉपर्टी के लिए चयनित वैल्यू प्रॉपर्टी को बाध्य करते हैं।

सीमाएं: एक ही समूह में

  1. दो रेडियो बटन डिजाइन समय में एक ही पाठ हो सकता है नहीं (? लेकिन यह वास्तव में एक सीमा है)
  2. , रेडियो बटन की जाँच मूल्यों हो सकता है सटीक दिखाई नहीं दे रहा है (यानी एक ही समूह में दो रेडियो बटन चेक किए जा सकते हैं)। हालांकि यह रनटाइम पर नहीं होना चाहिए।

नोट एक कस्टम नियंत्रण बनाते समय, परियोजना से पहले कस्टम वस्तु पिटारे में उपलब्ध है का निर्माण किया जाना चाहिए।

0

फॉर्म बनाते समय आप "डेटा स्रोत" पैनल से आइटम खींच सकते हैं। डेटा स्रोत पैनल में आप एक वर्ग या तालिका कर सकते हैं और इसके सभी बच्चों को फ़ॉर्म में खींचा जा सकता है और स्वचालित रूप से एक टेक्स्टबॉक्स उत्पन्न करेगा या इस परिदृश्य में डेटा बाध्यकारी वाला एक रेडियो बटन होगा। डेटाबेस या कक्षा में आपको प्रत्येक विकल्प के लिए थोड़ा/बूल बनाना होगा।

समूह रेडियो बटन और एक डेटा बाइंडिंग के बिना एक रेडियो बटन जोड़ने के सभी बिट/bools 0.

सेट CausesValidation सभी रेडियो बटन के लिए गलत पर रखने के लिए।

जब की तरह सभी रेडियो बटन के माध्यम से परिवर्तन पाश की बचत:

((YourClass)myBindingSource.DataSource).property1 = radioButton1.Checked; 
((YourClass)myBindingSource.DataSource).property2 = radioButton2.Checked; 

मुझे लगता है कि इस How do I use databinding with Windows Forms radio buttons? की एक प्रति है और इसलिए, यहाँ मेरा उत्तर वहाँ की एक प्रति है।

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