c# महत मैं डेटाग्रिड दृश्यकेल में प्रदर्शित करने के साथ ही संपादन के लिए एक नियंत्रण कैसे होस्ट करूं?




सम्पादकीय का अर्थ (3)

आपके "अद्यतन" के अनुसार, कस्टम DataGridViewCell बनाने से ऐसा किया जाता है मैंने इसे किया है, और एमएसडीएन से उपलब्ध उदाहरण कोड से बहुत बदलाव की आवश्यकता नहीं है। मेरे मामले में, मुझे कस्टम संपादन नियंत्रण का एक गुच्छा चाहिए, इसलिए मैंने डाटाग्रीड DataGridViewTextBoxCell और DataGridViewColumn से वंशानुक्रम समाप्त किया। मैंने अपनी कक्षा में (जो कि IDataGridViewEditingControl से विरासत में मिली है) एक नया कस्टम नियंत्रण IDataGridViewEditingControl , जो कि IDataGridViewEditingControl कंट्रोल को लागू किया IDataGridViewEditingControl , और यह सब सिर्फ काम किया

मुझे लगता है कि आपके मामले में, आप एक PanelDataGridViewCell लिख सकते हैं जिसमें एक नियंत्रण MyPanelControl होता है जो पैनल से उत्तराधिकारी होता है और IDataGridViewEditingControl कार्यान्वित IDataGridViewEditingControl

मैंने देखा है कि कैसे: Windows प्रपत्रों में होस्ट नियंत्रण डेटाग्रिड दृश्य कोशिकाओं जो बताता है कि कैसे एक डेटाग्रिड दृश्य में सेल को संपादित करने के लिए एक नियंत्रण होस्ट करने के लिए। लेकिन मैं सेल को प्रदर्शित करने के लिए एक नियंत्रण कैसे होस्ट कर सकता हूं?

मुझे एक ही सेल में एक फ़ाइल नाम और एक बटन प्रदर्शित करना होगा। हमारा यूआई डिजाइनर एक ग्राफिक डिज़ाइनर नहीं है, जो प्रोग्रामर नहीं है, इसलिए मुझे उस कोड को मैच करना है जो उसने खींचा है, चाहे वह संभव है - या बुद्धिमान - या नहीं हम VS2008 का उपयोग कर रहे हैं और सी # में .NET 3.5 के लिए लिख रहे हैं, अगर यह एक अंतर बनाता है

अद्यतनः 'शुद्ध एक कस्टम डाटाग्रीड दृश्यकेल बनाने का सुझाव देता है जो एक पैनल को पहले चरण के रूप में होस्ट करता है; किसी ने भी ऐसा किया?


इसे करने के दो तरीके हैं:

1)। डेटाग्रिड दृश्यकेल को एक निश्चित प्रकार के सेल में कास्ट करें जो मौजूद है। उदाहरण के लिए, एक DataGridViewTextBoxCell को DataGridViewComboBoxCell प्रकार में परिवर्तित करें।

2)। एक नियंत्रण बनाएं और उसे डेटाग्रीड दृश्य के नियंत्रण संग्रह में जोड़ दें, मेजबान होने वाले सेल को फिट करने के लिए उसका स्थान और आकार सेट करें।

झी-ज़िन ये नमूना कोड देखें जो नीचे युक्तियां दिखाता है:

private void Form_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("name");
    for (int j = 0; j < 10; j++)
    {
        dt.Rows.Add("");
    }
    this.dataGridView1.DataSource = dt;
    this.dataGridView1.Columns[0].Width = 200;

    /*
    * First method : Convert to an existed cell type such ComboBox cell,etc
    */

    DataGridViewComboBoxCell ComboBoxCell = new DataGridViewComboBoxCell();
    ComboBoxCell.Items.AddRange(new string[] { "aaa","bbb","ccc" });
    this.dataGridView1[0, 0] = ComboBoxCell;
    this.dataGridView1[0, 0].Value = "bbb";

    DataGridViewTextBoxCell TextBoxCell = new DataGridViewTextBoxCell();
    this.dataGridView1[0, 1] = TextBoxCell;
    this.dataGridView1[0, 1].Value = "some text";

    DataGridViewCheckBoxCell CheckBoxCell = new DataGridViewCheckBoxCell();
    CheckBoxCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
    this.dataGridView1[0, 2] = CheckBoxCell;
    this.dataGridView1[0, 2].Value = true;

    /*
    * Second method : Add control to the host in the cell
    */
    DateTimePicker dtp = new DateTimePicker();
    dtp.Value = DateTime.Now.AddDays(-10);
    //add DateTimePicker into the control collection of the DataGridView
    this.dataGridView1.Controls.Add(dtp);
    //set its location and size to fit the cell
    dtp.Location = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Location;
    dtp.Size = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Size;
}

एमएसडीएन संदर्भ: डेटाग्रिड दृश्य नियंत्रण में एक ही स्तंभ में विभिन्न नियंत्रणों को होस्ट कैसे करें

1 विधि का उपयोग इस तरह दिखता है:

दूसरी विधि का उपयोग इस तरह दिखता है:

अतिरिक्त जानकारी: एक ही DataGridView कॉलम में नियंत्रण ग्रिड को प्रारंभ करते समय रेंडर न करें


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





user-interface