1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 // Copyright (c) 2008 Novell, Inc. (http://www.novell.com)
23 // Jonathan Pobst (monkey@jpobst.com)
28 using NUnit.Framework;
31 using System.Windows.Forms;
32 using System.ComponentModel;
33 using System.Collections;
35 using System.Collections.Generic;
37 namespace MonoTests.System.Windows.Forms.DataGridViewBindingTest
41 public class DataSetBindingTest
44 public void TestDataSet ()
46 // Binding to a DataSet doesn't work unless you specify DataMember
48 f.ShowInTaskbar = false;
50 DataSet ds = new DataSet ();
52 DataTable dt = ds.Tables.Add ("Muppets");
54 dt.Columns.Add ("ID");
55 dt.Columns.Add ("Name");
56 dt.Columns.Add ("Sex");
58 dt.Rows.Add (1, "Kermit", "Male");
59 dt.Rows.Add (2, "Miss Piggy", "Female");
60 dt.Rows.Add (3, "Gonzo", "Male");
62 DataGridView dgv = new DataGridView ();
68 Assert.AreEqual (0, dgv.Columns.Count, "A1");
69 Assert.AreEqual (0, dgv.Rows.Count, "A2");
71 dgv.DataMember = "Muppets";
73 Assert.AreEqual (3, dgv.Columns.Count, "A3");
74 Assert.AreEqual (4, dgv.Rows.Count, "A4");
80 public void TestBasic ()
82 // Binding to a basic DataTable
84 f.ShowInTaskbar = false;
86 DataSet ds = new DataSet ();
88 DataTable dt = ds.Tables.Add ("Muppets");
90 dt.Columns.Add ("ID");
91 dt.Columns.Add ("Name");
92 dt.Columns.Add ("Sex");
94 dt.Rows.Add (1, "Kermit", "Male");
95 dt.Rows.Add (2, "Miss Piggy", "Female");
96 dt.Rows.Add (3, "Gonzo", "Male");
98 DataGridView dgv = new DataGridView ();
101 f.Controls.Add (dgv);
104 Assert.AreEqual (3, dgv.ColumnCount, "A1");
105 Assert.AreEqual (4, dgv.RowCount, "A2");
107 Assert.AreEqual ("ID", dgv.Columns[0].Name, "A3");
108 Assert.AreEqual ("ID", dgv.Columns[0].DataPropertyName, "A4");
109 Assert.AreEqual (0, dgv.Columns[0].DisplayIndex, "A5");
110 Assert.AreEqual ("ID", dgv.Columns[0].HeaderText, "A6");
111 Assert.AreEqual (0, dgv.Columns[0].Index, "A7");
112 Assert.AreEqual (true, dgv.Columns[0].IsDataBound, "A8");
113 Assert.AreEqual (false, dgv.Columns[0].ReadOnly, "A9");
114 Assert.AreEqual (true, dgv.Columns[0].Visible, "A10");
115 Assert.AreEqual ("System.Windows.Forms.DataGridViewTextBoxCell", dgv.Columns[0].CellType.ToString (), "A11");
116 Assert.AreEqual ("System.String", dgv.Columns[0].ValueType.ToString (), "A11-B");
117 Assert.AreEqual ("System.Windows.Forms.DataGridViewTextBoxColumn", dgv.Columns[0].GetType ().ToString (), "A11-C");
119 Assert.AreEqual ("Name", dgv.Columns[1].Name, "A12");
120 Assert.AreEqual ("Name", dgv.Columns[1].DataPropertyName, "A13");
121 Assert.AreEqual (1, dgv.Columns[1].DisplayIndex, "A14");
122 Assert.AreEqual ("Name", dgv.Columns[1].HeaderText, "A15");
123 Assert.AreEqual (1, dgv.Columns[1].Index, "A16");
124 Assert.AreEqual (true, dgv.Columns[1].IsDataBound, "A17");
125 Assert.AreEqual (false, dgv.Columns[1].ReadOnly, "A18");
126 Assert.AreEqual (true, dgv.Columns[1].Visible, "A19");
127 Assert.AreEqual ("System.Windows.Forms.DataGridViewTextBoxCell", dgv.Columns[1].CellType.ToString (), "A20");
128 Assert.AreEqual ("System.String", dgv.Columns[1].ValueType.ToString (), "A20-B");
130 Assert.AreEqual ("Sex", dgv.Columns[2].Name, "A21");
131 Assert.AreEqual ("Sex", dgv.Columns[2].DataPropertyName, "A22");
132 Assert.AreEqual (2, dgv.Columns[2].DisplayIndex, "A23");
133 Assert.AreEqual ("Sex", dgv.Columns[2].HeaderText, "A24");
134 Assert.AreEqual (2, dgv.Columns[2].Index, "A25");
135 Assert.AreEqual (true, dgv.Columns[2].IsDataBound, "A26");
136 Assert.AreEqual (false, dgv.Columns[2].ReadOnly, "A27");
137 Assert.AreEqual (true, dgv.Columns[2].Visible, "A28");
138 Assert.AreEqual ("System.Windows.Forms.DataGridViewTextBoxCell", dgv.Columns[2].CellType.ToString (), "A29");
139 Assert.AreEqual ("System.String", dgv.Columns[2].ValueType.ToString (), "A29-B");
141 Assert.AreEqual ("1", dgv.Rows[0].Cells[0].Value, "A30");
142 Assert.AreEqual ("Kermit", dgv.Rows[0].Cells[1].Value, "A31");
143 Assert.AreEqual ("Male", dgv.Rows[0].Cells[2].Value, "A32");
144 Assert.AreEqual ("2", dgv.Rows[1].Cells[0].Value, "A33");
145 Assert.AreEqual ("Miss Piggy", dgv.Rows[1].Cells[1].Value, "A34");
146 Assert.AreEqual ("Female", dgv.Rows[1].Cells[2].Value, "A35");
147 Assert.AreEqual ("3", dgv.Rows[2].Cells[0].Value, "A36");
148 Assert.AreEqual ("Gonzo", dgv.Rows[2].Cells[1].Value, "A37");
149 Assert.AreEqual ("Male", dgv.Rows[2].Cells[2].Value, "A38");
155 public void TestCheckBoxColumn ()
157 // Binding to a basic DataTable with a boolean value
158 Form f = new Form ();
159 f.ShowInTaskbar = false;
161 DataSet ds = new DataSet ();
163 DataTable dt = ds.Tables.Add ("Muppets");
165 dt.Columns.Add ("ID");
166 dt.Columns.Add ("Name");
167 dt.Columns.Add ("IsFunny", typeof (bool));
169 dt.Rows.Add (1, "Kermit", "true");
170 dt.Rows.Add (2, "Miss Piggy", "false");
171 dt.Rows.Add (3, "Gonzo", DBNull.Value);
172 dt.Rows.Add (4, "Animal", true);
173 dt.Rows.Add (5, "Fozzy", false);
174 dt.Rows.Add (6, "Beaker", "TRUE");
175 dt.Rows.Add (7, "Bunsen", "fALSe");
176 dt.Rows.Add (8, "Sweedish Chef", 1);
177 dt.Rows.Add (9, "Rolf", 0);
179 DataGridView dgv = new DataGridView ();
182 f.Controls.Add (dgv);
185 Assert.AreEqual (3, dgv.ColumnCount, "A1");
186 Assert.AreEqual (10, dgv.RowCount, "A2");
188 Assert.AreEqual ("IsFunny", dgv.Columns[2].Name, "A3");
189 Assert.AreEqual ("IsFunny", dgv.Columns[2].DataPropertyName, "A4");
190 Assert.AreEqual (2, dgv.Columns[2].DisplayIndex, "A5");
191 Assert.AreEqual ("IsFunny", dgv.Columns[2].HeaderText, "A6");
192 Assert.AreEqual (2, dgv.Columns[2].Index, "A7");
193 Assert.AreEqual (true, dgv.Columns[2].IsDataBound, "A8");
194 Assert.AreEqual (false, dgv.Columns[2].ReadOnly, "A9");
195 Assert.AreEqual (true, dgv.Columns[2].Visible, "A10");
196 Assert.AreEqual ("System.Windows.Forms.DataGridViewCheckBoxCell", dgv.Columns[2].CellType.ToString (), "A11");
197 Assert.AreEqual ("System.Boolean", dgv.Columns[2].ValueType.ToString (), "A12");
198 Assert.AreEqual ("System.Windows.Forms.DataGridViewCheckBoxColumn", dgv.Columns[2].GetType ().ToString (), "A12-B");
200 Assert.AreEqual (true, dgv.Rows[0].Cells[2].Value, "A13");
201 Assert.AreEqual (false, dgv.Rows[1].Cells[2].Value, "A14");
202 Assert.AreEqual (DBNull.Value, dgv.Rows[2].Cells[2].Value, "A15");
203 Assert.AreEqual (true, dgv.Rows[3].Cells[2].Value, "A16");
204 Assert.AreEqual (false, dgv.Rows[4].Cells[2].Value, "A17");
205 Assert.AreEqual (true, dgv.Rows[5].Cells[2].Value, "A18");
206 Assert.AreEqual (false, dgv.Rows[6].Cells[2].Value, "A19");
207 Assert.AreEqual (true, dgv.Rows[7].Cells[2].Value, "A20");
208 Assert.AreEqual (false, dgv.Rows[8].Cells[2].Value, "A21");
210 Assert.AreEqual ("System.Windows.Forms.DataGridViewCheckBoxCell", dgv.Rows[8].Cells[2].GetType ().ToString (), "A22");
216 public void TestAutoGenerateColumns ()
218 // Binding when AutoGenerateColumns is false
219 Form f = new Form ();
220 f.ShowInTaskbar = false;
222 DataSet ds = new DataSet ();
224 DataTable dt = ds.Tables.Add ("Muppets");
226 dt.Columns.Add ("ID");
227 dt.Columns.Add ("Name");
229 dt.Rows.Add (1, "Kermit");
230 dt.Rows.Add (2, "Miss Piggy");
231 dt.Rows.Add (3, "Gonzo");
233 DataGridView dgv = new DataGridView ();
234 dgv.AutoGenerateColumns = false;
237 f.Controls.Add (dgv);
240 Assert.AreEqual (0, dgv.ColumnCount, "A1");
241 Assert.AreEqual (0, dgv.RowCount, "A2");
243 dgv.DataSource = null;
245 DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn ();
246 col1.DataPropertyName = "Name";
247 dgv.Columns.Add (col1);
251 Assert.AreEqual (1, dgv.ColumnCount, "A3");
252 Assert.AreEqual (4, dgv.RowCount, "A4");
254 Assert.AreEqual ("Kermit", dgv.Rows[0].Cells[0].Value, "A5");
256 dgv.DataSource = null;
258 DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn ();
259 col2.DataPropertyName = "id";
260 dgv.Columns.Add (col2);
264 Assert.AreEqual (2, dgv.ColumnCount, "A6");
265 Assert.AreEqual (4, dgv.RowCount, "A7");
267 Assert.AreEqual ("Kermit", dgv.Rows[0].Cells[0].Value, "A8");
268 Assert.AreEqual ("1", dgv.Rows[0].Cells[1].Value, "A9");
275 public class BindingListTest
278 public void TestNullItemInList ()
280 // Binding when AutoGenerateColumns is false
281 Form f = new Form ();
282 f.ShowInTaskbar = false;
284 // The list contains one object, but the object is null
285 IList<Customer> list = new Customer[1];
287 DataGridView dgv = new DataGridView ();
288 dgv.DataSource = new BindingList<Customer> (list);
290 f.Controls.Add (dgv);
293 Assert.AreEqual (1, dgv.ColumnCount, "A1");
294 Assert.AreEqual (2, dgv.RowCount, "A2");
299 private class Customer
305 set { name = value; }