Det jag tänkte var att använda e.ColumnIndex och e.RowIndex och knyta baserat på positionen uppdatera listan men det känns väldigt omständigt.
Någon som har andra förslag på hur jag kan göra?
3 svar · 491 visningar · startad av CatZ
Jag har en datagridview som jag binder till mha Entity Framework. Det fungerar alldeles utmärkt. Är lätt att lära sig och kommer göra utvecklingen lite snabbare då ingen av oss är någon direkt SQL-expert.
Däremot så har jag stött på något som känns lite hmm hur ska jag uttrycka det omständigt. Som alltid när man utvecklar har man inte tid att lära sig allting själv och jag har fått ansvaret över modellerna och databasen.
Det jag vill kunna göra är att ta emot en BindingList, List eller IList från min kollega och spara den mha Entity Framework. Problemet som jag stötte på här var väl mest hur gör jag på bästa sätt om innehållet i en DataGridView's DataSource till en List?
Omvänt är det inga problem...
List<Användare> användarelist = användareQuery.ToList<Användare>();
Så kan kollegan binda min List till sin datagridview.
Det jag vill göra är följande:
ObjectQuery<Användare> användare = entities.Användare;
foreach (Användare a in [b]användare[/b]) //Användare är den collection som jag tänker spara
{
foreach (Användare b in [b]_oplist[/b]) //_oplist är den collection som kollegan fått till sin datagridview
{
a.Password = b.Password;
a.FullName = b.FullName;
}
}
Problemet är bara att värdena i _oplist givetvis inte är sparade. Den enda lösningen jag kan komma på är att uppdatera _oplist så for något ändras i en Cell i datagridview'n. Finns det någon bättre lösning?
Det jag tänkte var att använda e.ColumnIndex och e.RowIndex och knyta baserat på positionen uppdatera listan men det känns väldigt omständigt.
Någon som har andra förslag på hur jag kan göra?
Jag förstår inte riktigt vad du är ute efter, varför har du 2 användarlistor och vad är skillnaden mellan dem? Varför kan du inte bara låta den ena listan vara lika med den andra? Eller lägga till dem till din lista?
Catz skrev:
DataGridView's DataSource till en List?
IEnumerable enumerable = datagridview.DataSource;
Och sedan skapa en ny lista ifrån IEnumerable, typ List myList = new List(enumerable); eller något sådant bör fungera.
Catz skrev:
foreach (Användare a in användare) //Användare är den collection som jag tänker spara
{
foreach (Användare b in _oplist) //_oplist är den collection som kollegan fått till sin datagridview
{
a.Password = b.Password;
a.FullName = b.FullName;
}
}
Denna kodsnutt var nog inte så genomtänkt va? Säg att du har 10 användare i din lista och 10 användare i _oplist. Det betyder att du kommer sätta din första användare 10 gånger och din första användare kommer få _opList sista användares värde, lika så blir det sedan för alla användare i din lista, de kommer alla sättas 10 gånger och få värdet av den sista användaren i _oplist.
Din användare lista kommer alltså innehålla samma 10 användare och det kommer vara den sista användare i _oplist. :)
- M
Du har rätt angående foreach, jag tänkte inte alls jag bara skrev ihop nåt lite snabbt :e
Problemet med min DataSource löste sig självt... jag bytte ut BindingList till List och då har jag en lista som deklareras i load och den innehåller hela tiden alla ändringar jag gör. Behövde inte ens tänka själv :)
Tillbaka till foreach, det går inte göra så som jag skrev i entityframework. Du kan bara göra ändringar i ett objekt som är "Unchanged" så debuggern klagar ;)
Lösningen är rätt ful och säkert inte det minsta vettig men den fungerar, synpunkter?
foreach (Användare a in användare)
{
Användare b = _anvlist.Find(delegate(Användare c) { return c.ID == a.ID; });
entities.Attach(a);
a.FullName = b.FullName;
b.Password = b.Password;
}