質問

I just cant get this to work. I have a datagridview in winforms and in this one of my columns is a DataGridViewComboBoxColumn.

In my constructor I set it up like so

DataGridViewComboBoxColumn column = (DataGridViewComboBoxColumn)RectangleGrid.Columns["Material"];

        DataTable data = new DataTable();

        data.Columns.Add(new DataColumn("Value", typeof(int)));
        data.Columns.Add(new DataColumn("Description", typeof(string)));

        foreach (Materials M in DataStructure.Active.Active_Materials)
        {
            data.Rows.Add(M.MaterialNr, (M.MaterialNr + 1).ToString() + " " + M.Material.Name);
        }

        column.DataSource = data;
        column.ValueMember = "Value";
        column.DisplayMember = "Description";

And it actually works well except that nothing is selected in the drop down box which I want. I have googled this and for instance tried this approach: http://goo.gl/kBy8W but with no go because EditingControlShowing only happens when i click the box and not when it first comes up (so I can set selected index once it's clicked but thats no good). The CellFormatting version at least changes the value but it just puts a string there rather than my first index from my data source.

I also tried this

column.DefaultCellStyle.NullValue = data.Rows[0]["Description"];
column.DefaultCellStyle.DataSourceNullValue = data.Rows[0]["Value"];

and that seemed to work but then when i selected the first index in the dropdown (so drop the dropdown down and then select the first index and then deselct the cell) I got an error from ParseFormattedValue where it says it cannot convert "value" to system.String.

There was this which seemed to be on the right track but i could not get it to work: http://goo.gl/VevA3

役に立ちましたか?

解決

I ended up "solving" it in a very dirty solution that I don't like but it sort of works.

I had my datagridview bound to a datatable (not database) so what i did was i connected an event handler to the TableNewRow event in the datatable.

then i did this in that event handler

    private void NewRectangleInserted(Object sender, DataTableNewRowEventArgs e)
    {
        if (e.Row[0].ToString() == "")
        {
            e.Row[0] = 0;
        }
    }

So basically when a new row is created I set the value of the combobox to 0 unless the user created the row by adding a value in that particular cell (why i check if it equals "")

The result is that as soon as you highlight a new line or any cell in a line the combobox is filled in. however the new line at the botton still has a blank combobox until you highlight it.

not perfect but a lot better. to bad it had to be done with a hack!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top