Prashanth
Prashanth

Reputation: 177

edit and update in gridview

I am tring to edit and update my db using gridview itself.I have nearly done everything but my only problem is that i have a dropdown list.I am happy with label for edit and changed it into dropdown list in edit mode.Now i am not able to update the dropdown value alone into my db.I am getting a value called system.web.I am not able to get desired value i am facing difficulty because of literal control.I am a newbie so pls help me out.Thanks in advance mates. my design:

<asp:GridView runat ="server"  GridLines = "Both" DataKeyNames="book_id"  
 AutoGenerateColumns ="false" CellPadding ="5" CellSpacing ="5" allowpaging="True" allowsorting="True"
 ID="gv_table1" EmptyDataText ="No data exists" OnRowEditing="gv_RowEditing" 
        PageIndex="0" PageSize="10" ToolTip="true"
OnRowCancelingEdit="gv_RowCancelingEdit" OnRowUpdating="gv_RowUpdating" 
        OnRowDeleting="gv_RowDeleting" onpageindexchanging="gv_table1_PageIndexChanging"  
>
<Columns>





<asp:BoundField DataField="book_name"   HeaderText="BookName">
<ControlStyle Width ="60" />
</asp:BoundField>
<asp:BoundField DataField="author_name" HeaderText="Author Name">
<ControlStyle Width ="60" />
</asp:BoundField>
<asp:BoundField DataField="publisher" HeaderText="Publisher">
<ControlStyle Width ="60" />
</asp:BoundField>
<asp:BoundField DataField="year_edition" HeaderText="Year/Edition">
<ControlStyle Width ="60" />
</asp:BoundField>
<asp:BoundField DataField="total_no" HeaderText="Total No">
<ControlStyle Width ="30" />
</asp:BoundField>
<asp:BoundField DataField="available" HeaderText="Available">
<ControlStyle Width ="30" />
</asp:BoundField>
<asp:BoundField DataField="tags" HeaderText="Tags">
<ControlStyle Width ="60" />
</asp:BoundField>
<asp:BoundField DataField="fare" HeaderText="Fare">
<ControlStyle Width ="30" />
</asp:BoundField>
<asp:TemplateField HeaderText="state">
                            <ItemTemplate>
                                <asp:Label ID="drpstatus1" AppendDataBoundItems="True"   Text='<%# Bind("state") %>'   Width ="60" runat="server">

                                </asp:Label >

                            </ItemTemplate>
                            <EditItemTemplate >
                           <asp:DropDownList ID="drpstatus" runat="server"    >
                                <asp:ListItem Text="available" Value="0"></asp:ListItem>
                                <asp:ListItem Text="binding" Value="1"></asp:ListItem>
                                <asp:ListItem Text="lost" Value ="2"></asp:ListItem>
                                <asp:ListItem Text ="notavailable" Value ="3"></asp:ListItem>
                            </asp:DropDownList>


                        </EditItemTemplate>

                            </asp:TemplateField>



 <asp:TemplateField HeaderText ="Options">

                                <itemtemplate >

                                        <asp:linkbutton id="btnEdit" runat="server" commandname="Edit" text="Edit" />

                                        <asp:linkbutton id="btnDelete" runat="server" commandname="Delete" text="Delete" />
                                </itemtemplate>
                                <edititemtemplate>
                                        <asp:linkbutton id="btnUpdate" runat="server" commandname="Update" text="Update" />
                                        <asp:linkbutton id="btnCancel" runat="server" commandname="Cancel" text="Cancel" />
                                </edititemtemplate>
                        </asp:templatefield>





</Columns>
</asp:GridView>

my code behind:

 public void setgrid()
    {

            gv_table1.DataSource = con.GetData("select  book_id,book_name,author_name,publisher,year_edition,total_no,state ,available,tags,fare from book_info where status!='deleted'");
            gv_table1.DataBind();
              }
     protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
    {


        gv_table1.EditIndex = e.NewEditIndex;

        this.setgrid();
        if (!IsPostBack)
        {
            Response.Write("not post back"); 
        }

    }

    protected void gv_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {

        gv_table1.EditIndex = -1;

        this.setgrid();
    }

    public void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {


        string totalno = (gv_table1.Rows[e.RowIndex].Cells[4].Controls[0] as TextBox).Text;
        string available = (gv_table1.Rows[e.RowIndex].Cells[5].Controls[0] as TextBox).Text;
        int total = Convert.ToInt32(totalno);
        int avail = Convert.ToInt32(available);

        if (total < avail)
        {
            Page page = HttpContext.Current.Handler as Page;

            if (page != null)
            {

               string error = "available should not be greater than total no";

                ScriptManager.RegisterStartupScript(page, page.GetType(), "err_msg", "alert('" + error + "');", true);

            }

        }
        else
        {
            int bookid = Convert.ToInt32(gv_table1.DataKeys[e.RowIndex].Values["book_id"].ToString());
            string bookname = ((TextBox)(gv_table1.Rows[e.RowIndex].Cells[0].Controls[0])).Text;
            string fare = (gv_table1.Rows[e.RowIndex].Cells[7].Controls[0] as TextBox).Text;


            string authorname = ((TextBox)(gv_table1.Rows[e.RowIndex].Cells[1].Controls[0])).Text;
            string publisher = ((TextBox)(gv_table1.Rows[e.RowIndex].Cells[2].Controls[0])).Text;
            string yearedition = ((TextBox)(gv_table1.Rows[e.RowIndex].Cells[3].Controls[0])).Text;
            string tags = ((TextBox)(gv_table1.Rows[e.RowIndex].Cells[6].Controls[0])).Text;

            string spacediv3 = Convert.ToString (( LiteralControl)(gv_table1.Rows[e.RowIndex].Cells[8].Controls[0])) ;
            string s = spacediv3 ;
            string status = "active";

            con.parameters("@bookid", DBConnection.Type.eInt, bookid);
            con.parameters("@createduser", DBConnection.Type.eVarchar, "user");
            con.parameters("@status", DBConnection.Type.eVarchar, status);
            con.parameters("@bookname", DBConnection.Type.eVarchar, bookname);
            con.parameters("@authorname", DBConnection.Type.eVarchar, authorname);
            con.parameters("@publisher", DBConnection.Type.eVarchar, publisher);
            con.parameters("@yearedition", DBConnection.Type.eVarchar, yearedition);
            con.parameters("@totalno", DBConnection.Type.eInt, totalno);
            con.parameters("@available", DBConnection.Type.eInt, available);
            con.parameters("@tags", DBConnection.Type.eVarchar, tags);
            con.parameters("@fare", DBConnection.Type.eInt, fare);
            con.parameters("@state", DBConnection.Type.eVarchar, s );
            con.parameters("@createddate", DBConnection.Type.eDateTime, "");
            con.parameters("@modifieduser", DBConnection.Type.eVarchar, "");
            con.parameters("@modifieddate", DBConnection.Type.eDateTime, "");

            con.ExecProcedure("sp_books");
            Response.Redirect("book_add.aspx");
        }
    }

    protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {

        int bookid = Convert.ToInt32(gv_table1.DataKeys[e.RowIndex].Values["book_id"].ToString());
        string status = "deleted";
        con.parameters("@bookid", DBConnection.Type.eInt, bookid);
        con.parameters("@createduser", DBConnection.Type.eVarchar, "user");
        con.parameters("@status", DBConnection.Type.eVarchar, status);
        con.parameters("@bookname", DBConnection.Type.eVarchar, "");
        con.parameters("@authorname", DBConnection.Type.eVarchar, "");
        con.parameters("@publisher", DBConnection.Type.eVarchar, "");
        con.parameters("@yearedition", DBConnection.Type.eVarchar, "");
        con.parameters("@totalno", DBConnection.Type.eInt, "");
        con.parameters("@available", DBConnection.Type.eInt, "");
        con.parameters("@tags", DBConnection.Type.eVarchar, "");
        con.parameters("@fare", DBConnection.Type.eInt, "");
        con.parameters("@state", DBConnection.Type.eVarchar, "");
        con.parameters("@createddate", DBConnection.Type.eDateTime, "");
        con.parameters("@modifieduser", DBConnection.Type.eVarchar, "");
        con.parameters("@modifieddate", DBConnection.Type.eDateTime, "");

        con.ExecProcedure("sp_books");
        Response.Redirect("book_add.aspx");
    }

Upvotes: 0

Views: 2040

Answers (2)

Tim Schmelter
Tim Schmelter

Reputation: 460108

Since your DropDownList is inside a TemplateField you can find the reference via FindControl("ID"):

public void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridView gv = (GridView)sender;
    GridViewRow row = gv.Rows[e.RowIndex];
    DropDownList ddlStatus = (DropDownList)row.FindControl("drpstatus");
    String selectedStatus = ddlStatus.SelectedValue;

Side-notes:

  1. Use validators instead of postback+alert. On that way you avoid unnecessary postbacks and are able to change the error-layout easily via css.
  2. What is con? I hope it's no a static connection! https://stackoverflow.com/a/9707060/284240
  3. You've used AppendDataBoundItems for a Label. That works only for List-controls like ListBox or DropDownList.

Upvotes: 1

Brian Mains
Brian Mains

Reputation: 50728

Other item needing corrected, this line:

string spacediv3 = Convert.ToString (( LiteralControl)(gv_table1.Rows[e.RowIndex].Cells[8].Controls[0])) ;

Should be:

string spacediv3 = ((LiteralControl)(gv_table1.Rows[e.RowIndex].Cells[8].Controls[0])).Text;

You have to get the text from the literal control, which doesn't need to be converted to string. Otherwise, by default, it calls ToString() on the LiteralControl, which returns "System.Web.UI.LiteralControl".

As far as the drop down you mentioned, I see it in markup, but not in any of the code that I can see.

Upvotes: 0

Related Questions