2011-10-15 15 views
5

मुझे एक तरीका चाहिए जिसमें मैं रन-टाइम पर कॉलम प्रकार को परिभाषित कर सकता हूं।डेटाग्रिड व्यू कॉलम प्रकार को परिभाषित करें प्रोग्रामेटिक

यहाँ मेरी कोड है:

foreach (DataGridViewColumn column in this.dataGrid.Columns) 
{ 
??? 
//i.e. column.type = checkbox 
} 

मैं इस foreach पाश में स्तंभ प्रकार को कैसे परिभाषित कर सकते हैं?

+0

BTW का उपयोग कर, http: //meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts –

+0

@ जॉन सैंडर्स धन्यवाद, लेकिन क्या कोई समाधान है? – funerr

+0

अगर मुझे जवाब पता था, तो मैंने इसका उत्तर दिया होगा। –

उत्तर

8

मैं नहीं 100% कुछ मैं तुम्हें सवाल समझ में हूँ, लेकिन जब आप स्तंभ बनाने आप स्तंभ के प्रकार का उल्लेख कर सकते हैं:

foreach (var definition in columnDefinitions) // Some list of what the column types are 
{ 
    var columnSpec = new DataColumn 
     { 
      DataType = definition.Type, // This is of type System.Type 
      ColumnName = defintion.Name // This is of type string 
     }; 

    this.dataGrid.Columns.Add(columnSpec); 
} 

आप एक बार यह बनाया गया है प्रकार बदलने के लिए की जरूरत है - आप ऐसा नहीं कर सकते सबसे अच्छा आप कॉलम को हटा सकते हैं और उन्हें नए प्रकार के साथ फिर से बना सकते हैं।

2

आप इसे बनाए जाने के बाद डेटाग्रिड व्यू कॉलम के प्रकार को नहीं बदल सकते हैं लेकिन रन-टाइम पर आवश्यक कॉलम बनाने से रोकने के लिए कुछ भी नहीं है।

तो, तर्क के आधार पर प्रत्येक कॉलम के प्रकार को निर्धारित करता है, आप आवश्यकतानुसार कॉलम बनाते हैं और उन्हें डेटाग्रिड व्यू में जोड़ते हैं।

एक चेकबॉक्स स्तंभ बनाने का एक उदाहरण नीचे है:

DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn() 
dataGridView1.Columns.Add(col); 
क्या अपने कॉलम प्रकार इसे और अधिक सलाह देने के लिए कठिन है निर्धारित करता है पर किसी भी अधिक जानकारी के बिना

, लेकिन आप आसानी एक DataTable के साथ इस तकनीक का इस्तेमाल कर सकते हैं, अपने प्रत्येक कॉलम के प्रकार का निरीक्षण करना, या किसी ऑब्जेक्ट पर प्रतिबिंब का उपयोग करना, जिसे आप डेटाग्रिडव्यू को बाध्य कर रहे हैं।

1

आप भी बटन स्तंभ असाइन कर सकते हैं और आप इस

DataGridViewButtonColumn column = new DataGridViewButtonColumn(); 
    datagridview1.Columns.Add(column); 
    column.FlatStyle = FlatStyle.System; 
    column.DefaultCellStyle.ForeColor = Color.ForestGreen;   
5

की तरह भी गुण प्रदान कर सकते हैं, तो हम आपकी उदाहरण पर विचार करें;

foreach (DataGridViewColumn column in this.dataGrid.Columns) 
{ 
    column.ValueType = typeof(DateTime); 
} 

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

this.datagrid.Columns[0].ValueType = typeof(Int32); 
this.datagrid.Columns[1].ValueType = typeof(String); 
this.datagrid.Columns[2].ValueType = typeof(DateTime); 

यह है जब आप एक डेटा स्रोत का उपयोग कर रहे हैं और प्रोग्राम के अपने स्वयं के कॉलम जोड़ने नहीं विशेष रूप से उपयोगी है।

2

मुझे लगता है कि जब आप DataGridView बनाते हैं तो मेरा मतलब है। उस मामले में आप DGV के डेटा स्रोत के लिए ऊपर एक DataTable में यह परिभाषित कर सकते हैं और हुक यह:

उदाहरण के लिए:

var columns = new List<Tuple<string, string>>(); 
columns.Add(new Tuple<string, string>("Name", "System.String")); 
columns.Add(new Tuple<string, string>("Selected", "System.Boolean")); 
columns.Add(new Tuple<string, string>("Id", "System.Int32")); 
var table = new DataTable(); 
columns.ForEach(c => table.Columns.Add(new DataColumn(c.Item1) { DataType = Type.GetType(c.Item2) })); 
var dgv = new DataGridView(); 
dgv.DataSource = table; 
0

आप प्रवेश मान लिया जाये कि BindingSource

var cbox = new DataGridViewCheckBoxColumn // Modify column type 
{ 
    AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells, 
    DataPropertyName = dgv.Columns["ColumnWantToChange"].Name, 
    HeaderText = "SOME HEADER NAME" 
}; 
dgv.Columns.Add(cbox); // Add new 
var r = dgv.Columns.OfType<DataGridViewTextBoxColumn>().Where(x => x.Name == "ColumnWantToChange").FirstOrDefault(); 
dgv.Columns.Remove(r); // Remove the original column 
संबंधित मुद्दे