Click here to Skip to main content
16,020,822 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Hello everyone,

I have a big issue these days regarding to editing/ updating cell in a gridview row. Past two days I`ve been browsing all relevant sources (including this site), but I haven`t found any solution. So, please, if You know- help me :)

My gridview (named gv_korpa) is bound to linq object query which is in Controller.
So, let`s go from there:


public static Object prikaziKorpu(string korpa)
        {
            var upit = (from x in DCKlase.dc.Kartas
                        where x.cartID==korpa
                        select new
                        {
                           
                            x.Id,
                            Artikal=x.eArtikli.naziv,
                            IDa=x.artikalFK,
                            Datum=x.datum,
                            Količina= x.kolicina,
                            Proizvođač=x.eArtikli.eProizvodaci.naziv,
                            Vrsta=x.eArtikli.eVrste.naziv,
                            Oblik=x.eArtikli.oblik,
                            Participacija=x.eArtikli.participacija,
                            Opis=x.eArtikli.opisArtikla,
                            Cijena= x.eArtikli.cijena,
                            CARD=x.cartID,
                            UKUPNO= (x.eArtikli.cijena * x.kolicina)-x.eArtikli.participacija,
                          
                         
                            
                        }).ToList();
            return upit;
            
        }

Gridview is bound on Page_Load, like this:

eShop es = new eShop();
            String cartID = es.getShoppingCartId();
            if (!IsPostBack)
            {
                gv_korpa.DataSource = KorpaController.prikaziKorpu(Session["PrijavljeniKorisnik"].ToString());
                gv_korpa.DataBind();
            }
            lbl_ukupno.Text = String.Format("{0:c}", es.getTotal(cartID));


and it bound correctly (everything is shown as it should be).

Asp.net code behind look like this:


<asp:GridView ID=gv_korpa runat="server"  Width="438px" 
                AutoGenerateColumns="False" onrowdeleting="gv_korpa_RowDeleting" 
                AutoGenerateEditButton="True" onrowediting="gv_korpa_RowEditing" 
                onrowupdating="gv_korpa_RowUpdating" onrowcancelingedit="gv_korpa_RowCancelingEdit"
                 >
                <Columns>
               <asp:BoundField DataField="Id" HeaderText="ID" Visible="true"/>
               <asp:BoundField DataField="Artikal" HeaderText="Artikal"/> 
               <asp:BoundField DataField="Proizvođač" HeaderText="Proizvođač"/> 
               <asp:BoundField DataField="Vrsta" HeaderText="Vrsta"/>
               <asp:BoundField DataField="Oblik" HeaderText="Oblik preparata"/>
               <asp:BoundField DataField="Cijena" HeaderText="Cijena"/>
             <asp:BoundField DataField="Količina"/>
              <asp:BoundField DataField="Participacija" HeaderText="Participacija ZZZO"/>
               <asp:BoundField DataField="UKUPNO" HeaderText="UKUPNO"/>
               <asp:BoundField DataField="CARD" HeaderText="Korisnik" Visible="false"/>   
               <asp:BoundField DataField="IDa" />
               <asp:BoundField DataField="Datum" />             
               <asp:CommandField ButtonType="Button" DeleteText="Ukloni" ShowDeleteButton="True"  />
   
                </Columns>
          
            </asp:GridView>


I`ve implemented delete method on event row_deleting and it works fine:

protected void gv_korpa_RowDeleting(object sender, GridViewDeleteEventArgs e)
       {
           int Id = int.Parse(gv_korpa.Rows[e.RowIndex].Cells[0].Text);
           KorpaController.oznacenaKarta(Id);
           eShop es = new eShop();
           String cartID = es.getShoppingCartId();


           gv_korpa.DataSource = KorpaController.prikaziKorpu(Session["PrijavljeniKorisnik"].ToString());
           gv_korpa.DataBind();
           lbl_ukupno.Text = String.Format("{0:c}", es.getTotal(cartID));
       }


But, update row cell is not working! What I wanted is to update my quantity by 1 on click.
I`ve tryed to change the quantity cell to textfield, but that also didn`t worked.
Here is update method which I`ve implemented (it working 100% because I using it on the other control).


public void AddItem(int ProductID, int quantity)
        {

            using (DCKlaseDataContext dc = new DCKlaseDataContext())
            {
                try
                {
                    var myItem = (from c in dc.Kartas
                                  where c.Id== ProductID

                                  select c).FirstOrDefault();

                    if (myItem == null)
                    {


                        


                    }
                    else
                    {
                        myItem.kolicina += quantity;
                    }
                    dc.SubmitChanges();

                }
                catch (Exception exp)
                {
                    //Implement exception handling
                }
            }


So, any ideas?! I would really appreciate Your help!

Regards,

A.
Posted

Hi ellisbay,

You want to Edit single cell in grid view so for this you need to follow some steps:

1) first take a link in grid view whose would be Edit

2) bind The Id you are using in gridview in DataKeyNames,Use that Id in Command argument of Edit Link.CommandName="EDI"

3) give your code at Row Command of your grid view that is gridview1_row command.

4)Make class Call your procedure or inline queries,by whatever means you would like to edit. call the Id by which you will select the row in grid view.

5)Use below code on .aspx page show as: change below fields according to needs

C#
if (e.CommandName == "EDI")
        {
            Int32 ModuleId = Convert.ToInt32(e.CommandArgument.ToString());
            ViewState["ModuleId"]=ModuleId;
            DataTable dt = new DataTable();
            dt=Module.editgridModule(ModuleId);
            if (dt.Rows.Count > 0)
            {
                ddlProjectName.SelectedValue = dt.Rows[0]["ProjectId"].ToString());
                fillModuleDropdown();
                txtModuleName.Text = dt.Rows[0]["ModuleName"].ToString();
                txtModuleNameAbri.Text = dt.Rows[0]["ModuleCode"].ToString();
                txtsignoff.Text=dt.Rows[0]["SignoffDate"].ToString();
            }
}
 
Share this answer
 
Comments
ellisbay 25-Jan-12 7:59am    
THANK YOU very, very, very much!!! :)))
It works like charm.. :)

Followed your steps, and in row_command function just wrote this:

if (e.CommandName == "EDI")
{
int id = int.Parse(gv_korpa.Rows[0].Cells[0].Text);

AddItem(id);
gv_korpa.DataBind();
}

Thank you again!
bind it again
gv_korpa.DataBind();
 
Share this answer
 
Comments
ellisbay 25-Jan-12 4:28am    
You mean like this?

protected void gv_korpa_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int Id = int.Parse(gv_korpa.Rows[e.RowIndex].Cells[0].Text); //id cell
int product = int.Parse(gv_korpa.Rows[e.RowIndex].Cells[6].Text);// quantity cell
AddItem(Id, product);
gv_korpa.DataSource = KorpaController.prikaziKorpu(Session["PrijavljeniKorisnik"].ToString());
gv_korpa.DataBind();
}
?
Now working :(
In Update also bind the data to grid again.
Thats the only thing missing.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900