0

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");
    }
Prashanth
  • 167
  • 2
  • 2
  • 11
  • Use validators instead of postback+alert. What is `con`? I really hope it's no a static connection! Btw, you've used `AppendDataBoundItems` for a `Label`. That works only for List-controls like `ListBox` or `DropDownList`. – Tim Schmelter Aug 28 '12 at 14:53
  • i want to get the selected value from drop down list that is my problem. – Prashanth Aug 28 '12 at 14:56
  • Got the answer friends thanks to tim – Prashanth Aug 30 '12 at 11:55

2 Answers2

1

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.
Community
  • 1
  • 1
Tim Schmelter
  • 450,073
  • 74
  • 686
  • 939
  • I am getting error as object reference not set to an instance of object in the last line(i.e)line where string selectedstatus. – Prashanth Aug 30 '12 at 09:32
  • @Prashanth: I've edited my answer. You can access the EditItemTemplate only in the row that is currently edited. I've edited my answer to show that this is actually in `RowUpdating` event. Here you should be able to find the dropdownlist via `GridViewRow.FindControl("CorrectIdOfDropdown")`. – Tim Schmelter Aug 30 '12 at 09:57
0

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.

Brian Mains
  • 50,520
  • 35
  • 148
  • 257