2011-01-27 9 views
15

क्या डेटाग्रिड व्यू में डेटटाइम पिकर नियंत्रण डालने का कोई तरीका है?मैं डेटाग्रिड व्यू में डेटटाइम पिकर कैसे प्रदर्शित कर सकता हूं?

मैंने सभी संभावित गुणों की जांच की लेकिन यह चेकबॉक्स, कॉम्बो बॉक्स इत्यादि का विकल्प देता है, लेकिन डेटटाइम पिकर नहीं।

उत्तर

25

आपने किसी भी अंतर्निहित विकल्प को याद नहीं किया है, लेकिन DataGridViewColumn और DataGridViewCell कक्षाओं को अपने चयन के किसी भी नियंत्रण की मेजबानी करने के लिए संभव है।

MSDN पर इस लेख और अधिक विस्तार में प्रक्रिया बताते हैं, और यहां तक ​​कि कुछ नमूना कोड में शामिल हैं:
How to: Host Controls in Windows Forms DataGridView Cells

तुम भी कोड परियोजना पर एक पूरा नमूना पा सकते हैं: Generic DataGridView V2.0

4
private void dgtest_CellClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex == 0) 
     { 
      dtp = new DateTimePicker(); 
      dgtest.Controls.Add(dtp); 
      dtp.Format = DateTimePickerFormat.Short; 
      Rectangle Rectangle = dgtest.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true); 
      dtp.Size = new Size(Rectangle.Width, Rectangle.Height); 
      dtp.Location = new Point(Rectangle.X, Rectangle.Y); 

      dtp.CloseUp += new EventHandler(dtp_CloseUp); 
      dtp.TextChanged += new EventHandler(dtp_OnTextChange); 


      dtp.Visible = true; 
     } 
    } 
    private void dtp_OnTextChange(object sender, EventArgs e) 
    { 

     dgtest.CurrentCell.Value = dtp.Text.ToString(); 
    } 
    void dtp_CloseUp(object sender, EventArgs e) 
    { 
     dtp.Visible = false; 
    } 
+3

यह एक बहुत बड़ा कोड ब्लॉक है - क्या आप इसे इस प्रश्न को संबोधित करने के बारे में कुछ स्पष्टीकरण शामिल करने के लिए संपादित कर सकते हैं ? – josliber

1

हल करने के लिए DataGridView में डेटटाइम पिकर का उपयोग करते समय कुछ प्रविष्टि समस्याएं आप उपरोक्त संदर्भित माइक्रोसॉफ्ट नमूने में निम्नलिखित जोड़ना चाहेंगे। मूल्यवान घटना के साथ समस्याओं की खोज करने में काफी समय लगा, उम्मीद के अनुसार गोलीबारी नहीं हुई। फिक्स यहां से आया (stackoverflow) और नीचे सी # में अनुवाद किया गया। डेटाग्रिड व्यू और डेटटाइम पिकर पर खोज करते समय मैं इस फोरम पोस्ट को ढूंढते समय यह जानकारी यहां जोड़ना उचित लग रहा था।

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 

     switch (keyData & Keys.KeyCode) 
     { 
      case Keys.Enter: 
      case Keys.Tab: 
       this.dataGridView.Focus(); 
       break; 
     } 

     return base.ProcessCmdKey(ref msg, keyData); 

    } 
0

हो सकता है कि यह उचित नहीं है, लेकिन आसान चाल और एक ही परिणाम ........ बहुत कम कोड ...... मैं सिर्फ बॉक्स के बाहर चारों ओर और हालांकि खेल रहा था, बस सेट

मैं मेरा छिपाने जब तक वे सेल क्लिक करें, या आप पहले दिखा सकते हैं मैं घोषणा की:

DateTimePicker1.Visible = False 

जब आप सेल में क्लिक करें, इस कोड को चलाने ...

DateTimePicker1.Visible = True 
    ActiveControl = DateTimePicker1 

फिर

नीचे
Public Sub DateTimePicker1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.ValueChanged 



    requestDGV.Rows(0).Cells("requestTimeOff").Value = (DateTimePicker1.Value) 
    DateTimePicker1.Visible = False 
    DateTimePicker1.Enabled = False 

End Sub 

सुपर बेसिक, और मैं इसे बॉक्स में सीधे बैठे, जगह से बाहर

या सुपर आसान मोड ....... मैं बस की तरह करने के लिए नहीं लगता है है छिपाने मेरा स्तंभ तक क्लिक

Public Sub DateTimePicker1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.ValueChanged 


    requestDGV.Rows(0).Cells("requestTimeOff").Value = (DateTimePicker1.Value) 

End Sub 

आप वास्तव में सिर्फ इतना है कि एक पंक्ति ..... डेटा बस बहुत कम कोड ग्रिड में हो जाएगा, जरूरत है .....

0

मैं क्लोज अप घटना लगता है ओ n DateTimePicker अधिक उपयुक्त है क्योंकि बदले गए मान किसी भी बदलाव पर ट्रिगर कर रहे हैं जबकि क्लोजअप केवल तभी ट्रिगर होता है जब पूरी तिथि चयनित होती है