locked
populate/bind dropdownlist at insert template of ListView asp.net C# RRS feed

  • Question

  • User-1016229741 posted

    so with many struggles and with much help from this forum i have gotten my little project to where i can send the light at the end of the tunnel. the project is working except for one current issue. i have a DDL in both edit and insert templates. the edit template DDL is populating and works fine. on insert it isn't and i am not sure why. i have tried what i have found on forums like this and others and nothing has fit my needs or worked at all. i will include all code to see if i have something else going on that is thwarting my efforts but hopefully it is something that can be remedied easily (but out of my current knowledge base). thank you ahead of time for any help provided.

    aspx:

    <form id="form1" runat="server">
    <div>
    <asp:Label ID="lblOrderNo" Text="Order No" runat="server"></asp:Label>
    <asp:TextBox ID="txtOrderNo" runat="server"></asp:TextBox>
    <asp:Label ID="lblOrderID" Text="Order ID" runat="server"></asp:Label>
    <asp:TextBox ID="txtHdrOrderID" runat="server"></asp:TextBox>
    <br />
    <asp:Button ID="btnSubmit" runat="server" onclick="btnSubmit_Click" Height="24px" Text="Submit" style="font-family: 'Arial Narrow'; font-size: 12pt; background-color: #CCCCCC;" />
    <br />
    <asp:ListView ID="ListView1" runat="server" DataKeyNames="OrderItemsId" InsertItemPosition="LastItem"
    OnItemInserting="InsertListViewItem" OnItemDeleting="DeleteListViewItem" OnItemEditing="EditListViewItem"
    OnItemUpdating="UpdateListViewItem" OnItemCanceling="CancelListViewItem" OnItemDataBound="OnItemDataBound">
    <AlternatingItemTemplate>
    <tr style="">
    <td>
    <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="Delete" />
    <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
    </td>
    <td>
    <asp:Label ID="ItemNoLabel" runat="server" Text='<%# Eval("ItemNo") %>' />
    </td>
    <td>
    <asp:Label ID="ItemNameLabel" runat="server" Text='<%# Eval("ItemName") %>' />
    </td>
    <td>
    <asp:Label ID="QuantityLabel" runat="server" Text='<%# Eval("Quantity") %>' />
    </td>
    <td>
    <asp:Label ID="RateLabel" runat="server" Text='<%# Eval("Rate") %>' />
    </td>
    <td>
    <asp:Label ID="TotalAmountLabel" runat="server" Text='<%# Eval("TotalAmount") %>' />
    </td>
    <td>
    <asp:Label ID="OrderItemsIdLabel" runat="server" Text='<%# Eval("OrderItemsId") %>' />
    </td>
    </tr>
    </AlternatingItemTemplate>
    <EditItemTemplate>
    <tr style="">
    <td>
    <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="Update" />
    <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Cancel" />
    </td>
    <td>
    <asp:DropDownList ID="ddlItemNo" runat="server"></asp:DropDownList>
    </td>
    <td>
    <asp:TextBox ID="ItemName" runat="server" Text='<%# Eval("ItemName") %>' />
    </td>
    <td>
    <asp:TextBox ID="Quantity" runat="server" Text='<%# Eval("Quantity") %>' />
    </td>
    <td>
    <asp:TextBox ID="Rate" runat="server" Text='<%# Eval("Rate") %>' />
    </td>
    <td>
    <asp:TextBox ID="TotalAmount" runat="server" Text='<%# Eval("TotalAmount") %>' />
    </td>
    <td>
    <asp:Label ID="OrderItemsId" runat="server" Text='<%# Eval("OrderItemsId") %>' />
    </td>
    </tr>
    </EditItemTemplate>
    <EmptyDataTemplate>
    <table runat="server" style="">
    <tr>
    <td>No data was returned.</td>
    </tr>
    </table>
    </EmptyDataTemplate>
    <InsertItemTemplate>
    <tr style="">
    <td>
    <asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="Insert" />
    <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Clear" />
    </td>
    <td>
    <asp:DropDownList ID="ddlItemNo" runat="server"></asp:DropDownList>
    </td>
    <td>
    <asp:TextBox ID="ItemName" runat="server" Text='<%# Bind("ItemName") %>' />
    </td>
    <td>
    <asp:TextBox ID="Quantity" runat="server" Text='<%# Bind("Quantity") %>' />
    </td>
    <td>
    <asp:TextBox ID="Rate" runat="server" Text='<%# Bind("Rate") %>' />
    </td>
    <td>
    <asp:TextBox ID="TotalAmount" runat="server" Text='<%# Bind("TotalAmount") %>' />
    </td>
    <td>&nbsp;</td>
    </tr>
    </InsertItemTemplate>
    <ItemTemplate>
    <tr style="">
    <td>
    <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="Delete" />
    <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
    </td>
    <td>
    <asp:Label ID="ItemNoLabel" runat="server" Text='<%# Eval("ItemNo") %>' />
    </td>
    <td>
    <asp:Label ID="ItemNameLabel" runat="server" Text='<%# Eval("ItemName") %>' />
    </td>
    <td>
    <asp:Label ID="QuantityLabel" runat="server" Text='<%# Eval("Quantity") %>' />
    </td>
    <td>
    <asp:Label ID="RateLabel" runat="server" Text='<%# Eval("Rate") %>' />
    </td>
    <td>
    <asp:Label ID="TotalAmountLabel" runat="server" Text='<%# Eval("TotalAmount") %>' />
    </td>
    <td>
    <asp:Label ID="OrderItemsIdLabel" runat="server" Text='<%# Eval("OrderItemsId") %>' />
    </td>
    </tr>
    </ItemTemplate>
    <LayoutTemplate>
    <table runat="server">
    <tr runat="server">
    <td runat="server">
    <table id="itemPlaceholderContainer" runat="server" border="0" style="">
    <tr runat="server" style="">
    <th runat="server"></th>
    <th runat="server">ItemNo</th>
    <th runat="server">ItemName</th>
    <th runat="server">Quantity</th>
    <th runat="server">Rate</th>
    <th runat="server">TotalAmount</th>
    <th runat="server">OrderItemsId</th>
    </tr>
    <tr id="itemPlaceholder" runat="server">
    </tr>
    </table>
    </td>
    </tr>
    <tr runat="server">
    <td runat="server" style=""></td>
    </tr>
    </table>
    </LayoutTemplate>
    <SelectedItemTemplate>
    <tr style="">
    <td>
    <asp:Button ID="Delete" runat="server" CommandName="Delete" Text="Delete" />
    <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
    </td>
    <td>
    <asp:Label ID="ItemNoLabel" runat="server" Text='<%# Eval("ItemNo") %>' />
    </td>
    <td>
    <asp:Label ID="ItemNameLabel" runat="server" Text='<%# Eval("ItemName") %>' />
    </td>
    <td>
    <asp:Label ID="QuantityLabel" runat="server" Text='<%# Eval("Quantity") %>' />
    </td>
    <td>
    <asp:Label ID="RateLabel" runat="server" Text='<%# Eval("Rate") %>' />
    </td>
    <td>
    <asp:Label ID="TotalAmountLabel" runat="server" Text='<%# Eval("TotalAmount") %>' />
    </td>
    <td>
    <asp:Label ID="OrderItemsIdLabel" runat="server" Text='<%# Eval("OrderItemsId") %>' />
    </td>
    </tr>
    </SelectedItemTemplate>
    </asp:ListView>
    <br />
    </div>
    </form>

    code-behind:

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    private void BindListView1()
    {
    string constr = ConfigurationManager.ConnectionStrings["LESFieldTicketConnectionString"].ConnectionString;
    SqlConnection conn = new SqlConnection(constr);
    SqlCommand cmd = new SqlCommand("SELECT ItemNo, ItemName, Quantity, Rate, TotalAmount, OrderItemsID FROM OrderDetails WHERE OrderID=@OrderID", conn);
    conn.Open();
    cmd.Parameters.AddWithValue("@OrderID", txtHdrOrderID.Text);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dTable = new DataTable();
    da.Fill(dTable);
    ListView1.DataSource = dTable;
    ListView1.DataBind();
    conn.Close();
    }

    protected void OnItemDataBound(object sender, ListViewItemEventArgs e)
    {
    if (ListView1.EditIndex == (e.Item as ListViewDataItem).DataItemIndex)
    {
    string constr = ConfigurationManager.ConnectionStrings["LESFieldTicketConnectionString"].ConnectionString;
    SqlConnection conn = new SqlConnection(constr);
    SqlCommand cmd = new SqlCommand("SELECT Name FROM VW_LES_NAVResourceCode ORDER BY Name", conn);
    conn.Open();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dTable = new DataTable();
    da.Fill(dTable);
    DropDownList ddlItemNo = (e.Item.FindControl("ddlItemNo") as DropDownList);
    ddlItemNo.DataSource = dTable;
    ddlItemNo.DataTextField = "Name";
    ddlItemNo.DataValueField = "Name";
    ddlItemNo.DataBind();
    ddlItemNo.Items.Insert(0, new ListItem("Select Resource Code", "0"));
    }
    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
    BindListView1();
    }

    protected void InsertListViewItem(object sender, ListViewInsertEventArgs e)
    {
    //column or column values of list view
    ListViewItem item = e.Item;
    DropDownList tItemNo = (DropDownList)item.FindControl("ddlItemNo");
    TextBox tItemName = (TextBox)item.FindControl("ItemName");
    TextBox tQuantity = (TextBox)item.FindControl("Quantity");
    TextBox tRate = (TextBox)item.FindControl("Rate");
    TextBox tTotalAmount = (TextBox)item.FindControl("TotalAmount");
    TextBox tOrderItemsID = (TextBox)item.FindControl("OrderItemsID");
    // insert records into database
    string constr = ConfigurationManager.ConnectionStrings["LESFieldTicketConnectionString"].ConnectionString;
    SqlConnection con = new SqlConnection(constr);
    SqlCommand cmd = new SqlCommand("INSERT INTO dbo.OrderDetails (ItemNo, ItemName, Quantity, Rate, TotalAmount, OrderID) VALUES (@ItemNo, @ItemName, @Quantity, @Rate, @TotalAmount, @OrderID)", con);
    con.Open();
    //declare parameter values
    cmd.Parameters.AddWithValue("@ItemNo", tItemNo.Text.Trim());
    cmd.Parameters.AddWithValue("@ItemName", tItemName.Text.Trim());
    cmd.Parameters.AddWithValue("@Quantity", tQuantity.Text.Trim());
    cmd.Parameters.AddWithValue("@Rate", tRate.Text.Trim());
    cmd.Parameters.AddWithValue("@TotalAmount", tTotalAmount.Text.Trim());
    cmd.Parameters.AddWithValue("@OrderID", txtHdrOrderID.Text.Trim()); //taking value from header portion of form and inserting into invoice table
    cmd.ExecuteNonQuery();
    con.Close();
    //rebinding
    BindListView1();
    }

    protected void DeleteListViewItem(object sender, ListViewDeleteEventArgs e)
    {
    int autoID = int.Parse(ListView1.DataKeys[e.ItemIndex].Value.ToString());
    // delete sql script
    string constr = ConfigurationManager.ConnectionStrings["LESFieldTicketConnectionString"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(constr))
    {
    string Sql = "delete from OrderDetails where OrderItemsID = @AutoID";
    conn.Open();
    using (SqlCommand dCmd = new SqlCommand(Sql, conn))
    {
    dCmd.Parameters.AddWithValue("@AutoID", autoID);
    dCmd.ExecuteNonQuery();
    }
    conn.Close();
    //rebinding
    BindListView1();
    }
    }

    protected void EditListViewItem(object sender, ListViewEditEventArgs e)
    {
    ListView1.EditIndex = e.NewEditIndex;
    //rebinding
    BindListView1();
    }

    protected void UpdateListViewItem(object sender, ListViewUpdateEventArgs e)
    {
    ListViewItem item = ListView1.Items[e.ItemIndex];
    int autoID = int.Parse(ListView1.DataKeys[e.ItemIndex].Value.ToString());
    DropDownList tItemNo = (DropDownList)item.FindControl("ddlItemNo");
    TextBox tItemName = (TextBox)item.FindControl("ItemName");
    TextBox tQuantity = (TextBox)item.FindControl("Quantity");
    TextBox tRate = (TextBox)item.FindControl("Rate");
    TextBox tTotalAmount = (TextBox)item.FindControl("TotalAmount");
    Label lOrderItemsID = (Label)item.FindControl("OrderItemsID");

    // update records in database
    string constr = ConfigurationManager.ConnectionStrings["LESFieldTicketConnectionString"].ConnectionString;
    SqlConnection con = new SqlConnection(constr);
    SqlCommand cmd = new SqlCommand("UPDATE dbo.OrderDetails SET ItemNo = @ItemNo, ItemName = @ItemName, Quantity = @Quantity, Rate = @Rate, TotalAmount = @TotalAmount, OrderID = @OrderID where OrderItemsID = @AutoID", con);
    con.Open();
    //declare parameter values
    cmd.Parameters.AddWithValue("@ItemNo", tItemNo.Text.Trim());
    cmd.Parameters.AddWithValue("@ItemName", tItemName.Text.Trim());
    cmd.Parameters.AddWithValue("@Quantity", tQuantity.Text.Trim());
    cmd.Parameters.AddWithValue("@Rate", tRate.Text.Trim());
    cmd.Parameters.AddWithValue("@TotalAmount", tTotalAmount.Text.Trim());
    cmd.Parameters.AddWithValue("@OrderID", txtHdrOrderID.Text.Trim()); //taking value from header portion of form and inserting into invoice table
    cmd.Parameters.AddWithValue("@AutoID", lOrderItemsID.Text.Trim());
    cmd.ExecuteNonQuery();
    con.Close();
    ListView1.EditIndex = -1;
    //rebinding
    BindListView1();
    }

    protected void CancelListViewItem(object sender, ListViewCancelEventArgs e)
    {
    ListView1.EditIndex = -1;
    //rebinding
    BindListView1();
    }

    Wednesday, May 16, 2018 12:01 AM

Answers

  • User-1016229741 posted

    I added OnItemCreated and i have it working so far. i will put this as answer but haven't fully tested the heck out of it yet.

    protected void ItemCreated(object sender, ListViewItemEventArgs e)
    {
    if (e.Item.ItemType == ListViewItemType.InsertItem)
    {
    string constr = ConfigurationManager.ConnectionStrings["LESFieldTicketConnectionString"].ConnectionString;
    SqlConnection conn = new SqlConnection(constr);
    SqlCommand cmd = new SqlCommand("SELECT Name FROM VW_LES_NAVResourceCode ORDER BY Name", conn);
    conn.Open();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dTable = new DataTable();
    da.Fill(dTable);
    DropDownList ddlItemNo = (e.Item.FindControl("ddlItemNo") as DropDownList);
    ddlItemNo.DataSource = dTable;
    ddlItemNo.DataTextField = "Name";
    ddlItemNo.DataValueField = "Name";
    ddlItemNo.DataBind();
    ddlItemNo.Items.Insert(0, new ListItem("Select Resource Code", "0"));
    }
    }

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Wednesday, May 16, 2018 2:36 PM
  • User-1016229741 posted

    so i added a few lines of code that fixed it. this is a snipped from a few posts ago. just in case someone is searching to find answers like i did....

    DropDownList ddlItemNo = (e.Item.FindControl("ddlItemNo") as DropDownList);
    ddlItemNo.Items.Clear();
    ddlItemNo.AppendDataBoundItems = true;
    ddlItemNo.DataSource = dTable;
    ddlItemNo.DataTextField = "Name";
    ddlItemNo.DataValueField = "Name";
    ddlItemNo.DataBind();
    ddlItemNo.Items.Insert(0, new ListItem("Select Resource Code", "0"));

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Wednesday, May 16, 2018 8:27 PM

All replies

  • User-1016229741 posted

    I added OnItemCreated and i have it working so far. i will put this as answer but haven't fully tested the heck out of it yet.

    protected void ItemCreated(object sender, ListViewItemEventArgs e)
    {
    if (e.Item.ItemType == ListViewItemType.InsertItem)
    {
    string constr = ConfigurationManager.ConnectionStrings["LESFieldTicketConnectionString"].ConnectionString;
    SqlConnection conn = new SqlConnection(constr);
    SqlCommand cmd = new SqlCommand("SELECT Name FROM VW_LES_NAVResourceCode ORDER BY Name", conn);
    conn.Open();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dTable = new DataTable();
    da.Fill(dTable);
    DropDownList ddlItemNo = (e.Item.FindControl("ddlItemNo") as DropDownList);
    ddlItemNo.DataSource = dTable;
    ddlItemNo.DataTextField = "Name";
    ddlItemNo.DataValueField = "Name";
    ddlItemNo.DataBind();
    ddlItemNo.Items.Insert(0, new ListItem("Select Resource Code", "0"));
    }
    }

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Wednesday, May 16, 2018 2:36 PM
  • User-1016229741 posted

    of course after some testing now i am curious that at the INSERT template the dropdownlist doesn't show "Select Resource Code" as the default when you first view? it is showing correctly on the EDIT template or onitemdatabound. would anyone have a clue?

    Wednesday, May 16, 2018 3:37 PM
  • User-1016229741 posted

    so i added a few lines of code that fixed it. this is a snipped from a few posts ago. just in case someone is searching to find answers like i did....

    DropDownList ddlItemNo = (e.Item.FindControl("ddlItemNo") as DropDownList);
    ddlItemNo.Items.Clear();
    ddlItemNo.AppendDataBoundItems = true;
    ddlItemNo.DataSource = dTable;
    ddlItemNo.DataTextField = "Name";
    ddlItemNo.DataValueField = "Name";
    ddlItemNo.DataBind();
    ddlItemNo.Items.Insert(0, new ListItem("Select Resource Code", "0"));

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Wednesday, May 16, 2018 8:27 PM