Announcement

Collapse
No announcement yet.

Datentyp DatagridviewColumn

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datentyp DatagridviewColumn

    Hallo zusammen

    Ich verwende Visual Studio C# 2010.

    Ich will Daten aus einer Datenbank in einem Datagriedview anzeigen und diese verändern können. Danach sollen die Daten wieder in die Datenbank gespeichert werden. Das Abfragen, Anzeigen und Updaten funktioniert bereits. Jetzt möchte ich aber dass der Datentyp der einzelnen DatagridviewColumn eingeschränkt wird und somit der Benutzer nur Daten des jeweiligen Typs eingeben kann, ansonsten soll eine Fehlermeldung erscheinen.

    Hier ein Beispiel aus meinem Code:
    Code:
                DataTable dt = new DataTable();
                BindingSource bs = new BindingSource();
                dataGridView1.AutoGenerateColumns = false;
                dt.Columns.Add("id");
                dt.Columns.Add("name");
                //dt.Columns[0].DataType = typeof(int);
                //dt.Columns[1].DataType = typeof(String);
                dt.Rows.Add(0, "fritz");
                bs.DataSource = dt;
                dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
                dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
                dataGridView1.AutoGenerateColumns = false;
                this.dataGridView1.DataSource = bs;
                dataGridView1.Columns[0].DataPropertyName = "id";
                dataGridView1.Columns[1].DataPropertyName = "name";
                dataGridView1.Columns[0].ValueType = typeof(int);
                dataGridView1.Columns[1].ValueType = typeof(string);
    Ich möchte über datagridview.Columns[x].ValueType den Datentyp der Spalte definieren. Wenn ich jetzt über die BindingSource bs eine DataTable dt zuweise, welche noch keine Daten enthält, funktioniert das ganze. Sobald ich aber eine DataTable anhänge, die bereits definierte Spalten und Daten enthält werden der ValueTyp der datagridviewColumns mit dem DataType der DataTableColumn überschrieben.
    Die DataTable, welche durch die SQL Abfrage entsteht enthält nur Columns mit dem DataType String. Somit können danach in jeder Spalte beliebige Zeichen eingegeben werden, auch wenn es danach in der Spalte der SQL Datenbank zum Beispiel nur Werte des Datentyps INT sein dürfen.
    Bei der SQL Abfrage wird eine neue DataTable erstellt, welche der BindingSource bs zugewiesen wird.

    Gibt es eine Möglichkeit einer datagridviewColumn einen ValueType zuzuweisen und danach der BindingSource eine DataTable anzuhängen, ohne, dass der ValueType der DatagridviewColumn überschrieben wird? Oder muss ich wirklich jedes Mal den dataType der dataTableColumn definieren? Oder bin ich völlig auf dem falschen Weg?

    Herzlichen Dank für eure Hilfe!

  • #2
    Hallo rudl

    habe mal ein kleines Beispielprogramm geschrieben.
    In die 2. Spalte kann man nur Zahlen aber keine Buchstaben schreiben.


    Code:
    public partial class Form1 : Form
        {
            Control e;
            bool einmal = true;
            int column = 0;
            public Form1()
            {
                InitializeComponent();
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
                dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
                dataGridView1.Columns[0].DataPropertyName = "id";
                dataGridView1.Columns[1].DataPropertyName = "name";
                dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
                dataGridView1.CellMouseClick += new DataGridViewCellMouseEventHandler(dataGridView1_CellMouseClick);
                dataGridView1.CellBeginEdit += new DataGridViewCellCancelEventHandler(dataGridView1_CellBeginEdit);
            }
    
            void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
            {
                column=e.ColumnIndex;
            }
    
            void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                
                if (einmal)
                {
                    e.Control.KeyPress += new KeyPressEventHandler(Control_KeyPress);
                    einmal = false;
                }
            }
    
            void Control_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (column == 1)//hier einstellen in welche spalte nur zahlen eingegeben werden dürfen ( aslo im Beispiel 2.Spalte = 1)
                {
                    //in der if abfrage kann mann eingeben was für zeichen erlaubt sind
                    if (",1234567890\b".IndexOf(e.KeyChar.ToString()) < 0)
                    {
                        e.Handled = true;
                    }
                }
            }
            void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                column = e.ColumnIndex;
            }      
        }

    Hoffe dir hilft das Beispiel.

    Gruß Matthias
    Zuletzt editiert von Matthias Schiffler; 20.01.2011, 17:07.

    Comment

    Working...
    X