[Mono-winforms-list] problems with DataGridView and DataTable binding
Chris Toshok
toshok at ximian.com
Mon Feb 26 01:22:07 EST 2007
All aspects of DataGridView need a lot of work, not just the databinding
(although I disagree that it requires specialized logic for DataTable
binding. check out the databinding stuff in DataGrid.cs as an example.)
DataGridView really isn't complete enough to use - Would DataGrid be
enough for your usage?
Chris
On Sun, 2007-02-25 at 19:04 -0500, Mark Traudt wrote:
>
> The example below works with .NET but not with Mono
> (mono-1.2.3.2007023 on openSUSE 10.2). I encountered the following
> issues when using Mono:
>
> 1- I do not see any column headers when the form is first displayed.
>
> 2- The view is not refreshed automatically when I add rows by clicking
> the button (I have to force a repaint).
>
> 3- When I switch data sources, it does not seem to clear the column
> headers from the previous data source. Instead, it seems to add the
> columns for my current data source. So I end up with these column
> headers to the right that have no data associated with them.
>
> 4- If I have more than one row, then the scrollbar at the bottom
> flickers.
>
> I investigated the first problem in more detail. In DataGridView.cs,
> the DataSource setter calls BindIList, which can only display column
> headers if the list is not empty. I am not an expert in winforms, but
> it seems to me that this method needs specialized logic to bind
> DataTable values, in order to take advantage of the DataColumn
> metadata.
>
>
> using System;
> using System.Windows.Forms;
> using System.Drawing;
> using System.Data;
>
> public class OneOffApp
> {
> static void Main()
> {
> Application.Run( new OneOffForm() );
> }
> }
>
> public class OneOffForm : Form
> {
> private DataTable dt1;
> private DataTable dt2;
> private DataGridView grid;
> private Button button;
>
> public OneOffForm()
> {
> dt1 = new DataTable();
> dt1.Columns.Add("Date", typeof(DateTime));
> dt1.Columns.Add("Event", typeof(string));
>
> dt2 = new DataTable();
> dt2.Columns.Add("Date2", typeof(DateTime));
> dt2.Columns.Add("Event2", typeof(string));
>
> button = new Button();
> button.FlatStyle = FlatStyle.System;
> button.Click += new EventHandler(button_Click);
> button.Location = new Point(8, 8);
> button.Name = "Switch";
> button.Text = "Switch";
> Controls.Add(button);
>
> grid = new DataGridView();
> grid.MultiSelect = true;
> grid.RowHeadersVisible = false;
> grid.AllowUserToAddRows = false;
> grid.AllowUserToDeleteRows = false;
> grid.AllowUserToResizeRows = false;
> grid.ShowCellToolTips = false;
> grid.RowTemplate.Height = 18;
> grid.ReadOnly = true;
> grid.Location = new Point(8, button.Height * 2);
> grid.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
> grid.DataSource = dt1;
> Controls.Add(grid);
>
> Show();
> }
>
> private void button_Click(object sender, System.EventArgs e)
> {
> DataTable dt = (grid.DataSource == dt1)? dt2 : dt1;
>
> DataRow r = dt.NewRow();
> r[0] = DateTime.Now;
> r[1] = "Button.Click";
> dt.Rows.Add(r);
>
> grid.DataSource = dt;
> }
> }
>
>
>
>
>
> _______________________________________________
> Mono-winforms-list maillist - Mono-winforms-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-winforms-list
More information about the Mono-winforms-list
mailing list