Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding enum to combobox

Tags:

c#

linq-to-sql

Hi may i know how to get the enum value below to bind into the combobox? I wrote the below code which works well but wonder is this the best way.

public enum CourseStudentStatus
{
  Active = 1,
  Completed = 2,
  TempStopped = 3,
  Stopped = 4,
}

//Bind Course Status
Dictionary<string, int> list = new Dictionary<string, int>();
foreach (int enumValue in Enum.GetValues(typeof(CourseStudentStatus)))
  list.Add(Enum.GetName(typeof(CourseStudentStatus), enumValue), enumValue);
var column = ((DataGridViewComboBoxColumn)dgv.Columns["studentCourseStatus"]);
column.DataPropertyName = "StudentStatus";              
column.DisplayMember = "Key";
column.ValueMember = "Value";
column.DataSource= list.ToList();

----------------- UPDATE -------------------
Hi i have changed my code to this according to Sanjeevakumar Hiremat and it works perfectly.

cbStatus.DataSource = Enum.GetValues(typeof(CourseStudentStatus));

However, when i want to a Get() and want to bind the value back to the cbStatus, it cast error {"Object reference not set to an instance of an object."}
cbStatus.SelectedValue = Course.Status;.

The cbStatus.Datasource is not empty and it has value after bound to cbStatus.DataSource = Enum.GetValues(typeof(CourseStudentStatus));

please advice.

like image 336
VeecoTech Avatar asked Mar 18 '11 10:03

VeecoTech


People also ask

Does JSON support enum?

JSON has no enum type. The two ways of modeling an enum would be: An array, as you have currently. The array values are the elements, and the element identifiers would be represented by the array indexes of the values.

What are enum types?

An enum type is a special data type that enables for a variable to be a set of predefined constants. The variable must be equal to one of the values that have been predefined for it. Common examples include compass directions (values of NORTH, SOUTH, EAST, and WEST) and the days of the week.


1 Answers

Following should be the simplest way to bind it.

column.DataSource = Enum.GetValues(typeof(CourseStudentStatus));

To get the selected value you need to cast it to the enum type.

CourseStudentStatus selectedValue = (CourseStudentStatus)column.SelectedValue

Enum.GetValues returns an array of the enumType values which can then be bound to any control.

I've tested this on a standalone combobox, not in a combobox column in DataGridView, YMMV.

like image 172
Sanjeevakumar Hiremath Avatar answered Oct 06 '22 20:10

Sanjeevakumar Hiremath