Allt funkar fint, den läser in min lista med objekt, lägger saker där de skall ligga, men när jag kör min btnSave_OnClick, som lägger till information i en databas, det funkar fint, den lägger till infon i databasen. Men när jag skall repopulate datagridview så får jag problem..
OM det normalt skall presenteras som:
Id | Användarnamn | Förnamn | Efternamn
Så blir det i stället
Id | Användarnamn | Förnamn | Efternamn | Name | User
I dont understand why.. det måste dock ha något med min ReloadEmployeeGrid att göra.
Säg till om ni behöver employeeGrid_CellFormatting, också.
Cell Formatting är helt ointressant i det här läget. Problemet är hur du refererar till cellerna.
Kör du med databindning eller binder du på DataGridViewColumn."Name"?
//RED hittade BindingSource
Hade samma problem som dig tidigare. Jag löste det inte på det viset som du har tänkt dig utan jag gick in i Designern och skapade min skit där. Har inte lyckats binda korrekt på DataGridViewColumn."Name" annat än om det är samma namn som kommer från databasen. Dvs när jag försökte byta namn på en kolumn så var värdet på det svenska tomt och jag fick en engelsk kolumn extra med värdet istället.
Jag tror det ska gå att stänga av den automatiska tillägget av kolumner så att man tvingar att bara ta emot de med "rätt" namn. Kollegan gjorde så att han körde svenska namn på det som kom från databasen för att slippa problemet men det är en otäck fullösning och jag borde kanske inte nämnt den? :)
Sedan försöker du sätta värden i kolumnerna men du accessar dom via index och eftersom du accessar dom via index så har du inte en aning om det faktiskt är rätt kolumner ;)
Om du loppar igenom din ColumnCollection så är jag rätt säker på att du kommer inse att du ska ta bort de två raderna jag nämnde tidigare eftersom de hamnar sist varje gång du kör repopulate?
Inte för att det har med ämnet att göra men jag är lite nyfiken på vad din Factory har för syfte? :)
Factory factory = new Factory("Employee");
IEmployee employee = (IEmployee)factory.CreateInstance();
Förtillfället har den inte så stort syfte mer än returnera beroende på konstruktorns input en instans av ett objekt, där referensen till typen återfinns i en config-fil.
Handlar lite grann om att pröva på att skriva olika saker för att lära sig.. det är juuuu så svårt att hitta saker att programmera för skojsskull .. sen om ex. Factoryn funkar som en factory skall fungera enligt factory pattern. Är en annan sak! :OO
Iofs lite svårt att hitta BRA tutorials om factory pattern
// Våra kolumner som skall synas, förutom stanardkolumnen förnamn.
employeeGrid.Columns.Add("User", "Användarnamn");
employeeGrid.Columns.Add("Name", "Efternamn");
Du gör detta varje gång som du laddar om din lista, varför?
Defineringen av kolumnerna bör väl bara göras en gång?
public void InitializeEmployeeGrid(){
{
// fixa grejjerna för employee grid.
employeeGrid.EditMode = DataGridViewEditMode.EditProgrammatically;
employeeGrid.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler( this.employeeGrid_CellFormatting);
employeeGrid.RowHeaderMouseClick += new DataGridViewCellMouseEventHandler(employeeGrid_RowHeaderMouseClick);
// Våra kolumner som skall synas, förutom stanardkolumnen förnamn.
employeeGrid.Columns.Add("User", "Användarnamn");
employeeGrid.Columns.Add("Name", "Efternamn");
// propertyn,key
employeeGrid.Columns[0].HeaderText = "Id";
employeeGrid.Columns[0].DataPropertyName = "key";
// property User.
employeeGrid.Columns[1].HeaderText = "Användarnamn";
employeeGrid.Columns[1].DataPropertyName = "User.Username";
// property, Name.First
employeeGrid.Columns[2].HeaderText = "Förnamn";
employeeGrid.Columns[2].DataPropertyName = "Name.First";
// property, Name.Last
employeeGrid.Columns[3].DataPropertyName = "Name.Last";
}
public void RefreshEmployeeGrid()
{
EmployeeRepository emprepo = new EmployeeRepository();
IList<IEmployee> employees = emprepo.GetAll();
BindingSource datasource = new BindingSource();
datasource.DataSource = employees;
employeeGrid.DataSource = datasource;
}
Sedan för att inte ladda om allt från databasen för varje tillläggning av Employee så kanske du bör lägga till den nya i listan istället dvs att du binder bara en gång och arbetar mot listan och repositoryn istället för hela tiden repositoryn.