How to add buttons in a DataGridView from a List<> C#? -


like title says, able add buttons in datagridview list.

what have far:

public class users {     public int64 userid { get; set; }     public datagridviewbuttoncolumn emailaddress { get; set; }     public datagridviewbuttoncolumn gamertag { get; set; }     public datagridviewbuttoncolumn xuid { get; set; }     public string signedin { get; set; }     public string autosignin { get; set; }     public image gamerpic { get; set; } }  private list<users> getuserslist() {     try     {         list<users> list = new list<users>();         ienumerable<xboxuser> users = _xbc.users;         foreach (xboxuser user in users)         {             datagridviewbuttoncolumn emailaddress = new datagridviewbuttoncolumn()             {                 text = user.emailaddress             };             datagridviewbuttoncolumn gamertag = new datagridviewbuttoncolumn()             {                 text = user.gamertag             };             datagridviewbuttoncolumn xuid = new datagridviewbuttoncolumn()             {                 text = user.xuid             };             users xbuser = new users()             {                 userid = user.userid,                 emailaddress = emailaddress,                 gamertag = gamertag,                 xuid = xuid,                 signedin = user.issignedin.tostring(),                 autosignin = user.autosignin.tostring(),                 gamerpic = getimagefromurl(gamertag.text)             };             list.add(xbuser);         }         return list;     }     catch (exception ex)     {     }     return null; }  private void bo_refresh_click(object sender, eventargs e) {     list<users> listusers = getuserslist();     dg_userlist.datasource = new bindingsource(new bindinglist<users>(listusers), null); }  private void dg_userlist_cellclick(object sender, datagridviewcelleventargs e) {     switch (e.columnindex)     {         case 1:             clipboard.settext(dg_userlist.rows[e.rowindex].cells["emailaddress"].value.tostring());             messagebox.show("email " + dg_userlist.rows[e.rowindex].cells["emailaddress"].value.tostring() + " has been copied in clipboard.", "copy clipboard", messageboxbuttons.ok, messageboxicon.information);             break;         case 2:             clipboard.settext(dg_userlist.rows[e.rowindex].cells["gamertag"].value.tostring());             messagebox.show("gamertag " + dg_userlist.rows[e.rowindex].cells["gamertag"].value.tostring() + " has been copied in clipboard.", "copy clipboard", messageboxbuttons.ok, messageboxicon.information);             break;         case 3:             clipboard.settext(dg_userlist.rows[e.rowindex].cells["xuid"].value.tostring());             messagebox.show("xuid " + dg_userlist.rows[e.rowindex].cells["xuid"].value.tostring() + " has been copied in clipboard.", "copy clipboard", messageboxbuttons.ok, messageboxicon.information);             break;     } } 

everything appears correctly (even image in gamerpic) except buttons, show datagridviewbuttoncolumn { name=, index=-1 } instead of button right value on it.

i tried datagridvewbuttoncell not work either.

however, when click on cell supposed button, clipboard.settext works put datagridviewbuttoncolumn { name=, index=-1 } in it.

edit: have been able strings instead... looks less user friendly since there no button tell can click on it... works! sure prefer buttons instead :)

problem

when datasourced, datagridview auto-create columns based on data type each column. default, each column here created datagridviewtextboxcolumn, except column bound image - default datagridviewimagecolumn. though have 3 datagridviewbuttoncolumn properties, bound text columns - set value follows (example):

newrow.cells[1].value = datasourceobject.emailaddress.tostring();  // i.e. emailaddress datagridviewbuttoncolumn, so... newrow.cells[1].value = datagridviewbuttoncolumn.tostring();  console.writeline(datagridviewbuttoncolumn.tostring()); // prints "datagridviewbuttoncolumn { name=, index=-1 }" 

solution

start users class: change datagridviewbuttoncolumn properties type string.

public class users {     public int64 userid { get; set; }     public string emailaddress { get; set; }     public string gamertag { get; set; }     public string xuid { get; set; }     public string signedin { get; set; }     public string autosignin { get; set; }     public image gamerpic { get; set; } } 

and change getuserlist method account differences:

private list<users> getuserslist() {     try     {         list<users> list = new list<users>();         ienumerable<xboxuser> users = _xbc.users;          foreach (xboxuser user in users)         {             users xbuser = new users()             {                 userid = user.userid,                 emailaddress = user.emailaddress,                 gamertag = user.gamertag,                 xuid = user.xuid,                 signedin = user.issignedin.tostring(),                 autosignin = user.autosignin.tostring(),                 gamerpic = getimagefromurl(gamertag.text)             };              list.add(xbuser);         }          return list;     }     catch (exception ex)     {     }      return null; } 

and finally, in form constructor or load event - before you've bound data - manually add columns so:

dg_userlist.autogeneratecolumns = false;  datagridviewtextboxcolumn usercol = new datagridviewtextboxcolumn(); datagridviewbuttoncolumn emailcol = new datagridviewbuttoncolumn(); datagridviewbuttoncolumn tagcol = new datagridviewbuttoncolumn(); datagridviewbuttoncolumn xuidcol = new datagridviewbuttoncolumn(); datagridviewtextboxcolumn signcol = new datagridviewtextboxcolumn(); datagridviewtextboxcolumn autocol = new datagridviewtextboxcolumn(); datagridviewimagecolumn piccol = new datagridviewimagecolumn();  usercol.name = "userid";                    // allows access columns or emailcol.name = "emailaddress";             // cells in following manner: tagcol.name = "gamertag";                   // dgv.rows[index].cells["name"]; xuidcol.name = "xuid"; signcol.name = "signedin"; autocol.name = "autosignin"; piccol.name = "gamerpic";  usercol.datapropertyname = "userid";        // must match datasource properties. emailcol.datapropertyname = "emailaddress"; // allows datasourced columns match tagcol.datapropertyname = "gamertag";       // manually created columns. xuidcol.datapropertyname = "xuid"; signcol.datapropertyname = "signedin"; autocol.datapropertyname = "autosignin"; piccol.datapropertyname = "gamerpic";  usercol.headertext = "user id";             // allows displaying different text emailcol.headertext = "email address";      // column headers. tagcol.headertext = "gamer tag"; xuidcol.headertext = "xuid"; signcol.headertext = "signed in"; autocol.headertext = "auto sign in"; piccol.headertext = "avatar";  dg_userlist.columns.add(usercol); dg_userlist.columns.add(emailcol); dg_userlist.columns.add(tagcol); dg_userlist.columns.add(xuidcol); dg_userlist.columns.add(signcol); dg_userlist.columns.add(autocol); dg_userlist.columns.add(piccol); 

this allow create button columns still allow bind data instead of manually adding each row. datapropertyname button cells correctly display bound cell value.


Comments

Popular posts from this blog

1111. appearing after print sequence - php -

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

Ruby on Rails, ActiveRecord, Postgres, UTF-8 and ASCII-8BIT encodings -