not able to read from dynamic text box created in a gridview - c#

i am new to dotnet and am just trying out to add a row of text boxes for a grid view DYNAMICALLY.
On load of the page the grid view will be loaded with data as read only.
on clicking edit button, 2nd row will be loaded with text boxes. i succeeded till here. now on entering some data on these text boxes am not able to read the value back in my c# code.
here is my code snippet. can anyone please help me in this.
ASP code:
<%# Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="justGrid._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<br />
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
<br />
<asp:TextBox ID="TextBox1" runat="server" Width="170px"></asp:TextBox>
<br />
<br />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="edit" />
<br />
<br />
<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="save" />
<br />
</asp:Content>
C# code:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
staticTable();
}
bindGrid();
}
protected void staticTable()
{
string[] NamesArray = new string[] { "RAM", "SAM", "TOM", "JERRY" };
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt = ds.Tables.Add();
dt.Columns.Add("Names", typeof(string));
for (int j = 1; j <= 5; j++)
{
dt.Columns.Add("" + j, typeof(string));
}
foreach (string l in NamesArray)
{
dt.Rows.Add(l);
}
dt.Rows[0][1] = "S";
dt.Rows[0][2] = "P";
dt.Rows[0][5] = "P";
dt.Rows[1][2] = "S";
dt.Rows[1][4] = "P";
dt.Rows[2][3] = "S";
dt.Rows[3][1] = "U";
dt.Rows[3][5] = "P";
ViewState["CurrentTable"] = dt;
GridView1.DataSource = ds;
// GridView1.DataBind();
}
protected void bindGrid()
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
GridView1.DataSource = dtCurrentTable;
GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
for (int k = 1; k <= 5; k++)
{
TextBox tb1 = new TextBox();
tb1.Attributes.Add("runat", "server");
tb1.Width = 15;
tb1.ID = "TBID" + k;
tb1.Text = GridView1.Rows[1].Cells[k].Text.Trim().Replace(" ", string.Empty);
GridView1.Rows[1].Cells[k].Controls.Add(tb1);
}
}
protected void Button2_Click(object sender, EventArgs e)
{
TextBox box1 = (TextBox)GridView1.Rows[1].Cells[1].FindControl("TBID1");
TextBox1.Text = box1.Text;
}
}
Note: for testing purpose alone..am trying to display the 2nd row 1st column value in textbox.

foreach (GridViewRow row in GridView1.Rows)
{
TextBox box1 = row.FindControl("TBID") as TextBox;
if (box1 != null)
{
string value = box1.Text;
}
}

Related

Add Dynamic DropDown to HTML form by using StringBuilder in C# [that works with C# codebehind]

here I wanna add a dynamic dropdowns as a table in a html document, and I want to bind that dropdown with values of my SQLSERVER table column. once I finally choose the values in dropdown want to retrieve those selected values/text back to ma SqlServer.
please help me to finish this,
I also post ma codebehind with this question..
protected void txtcreate_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
DropDownList dl = new DropDownList();
int roomno = Convert.ToInt16(txtroom.Text);
int panno = Convert.ToInt16(txtpan.Text);
StringBuilder str = new StringBuilder();
str.Append("<table>");
for(int row = 0; row < roomno; row++)
{ str.Append("<tr>");
for(int col = 0; col < panno; col++)
{
dt = new DataTable();
str.Append("<td>");
dl.ID = "dd" + row.ToString() + col.ToString();
dt = sp.showStudent();
dl.DataSource = dt;
dl.DataTextField = "name";
dl.DataBind();
str.Append(dl);
str.Append("</td>");
ph.Controls.Add(dl);
}
str.Append("</tr>");
}
str.Append("</table>");
ltr.Text = str.ToString();
}
}
and the aspx file is
<form id="form1" runat="server">
<asp:TextBox ID="txtroom" runat="server"></asp:TextBox><asp:TextBox ID="txtpan" runat="server"></asp:TextBox><asp:Button ID="txtcreate" runat="server" OnClick="txtcreate_Click" Text="Button" />
<center>
<div>
<asp:GridView ID="grid" AutoGenerateColumns="true" runat="server">
</asp:GridView>
</div>
<asp:PlaceHolder ID="ph" runat="server">
<asp:Literal ID="ltr" runat="server"></asp:Literal>
</asp:PlaceHolder>
</center>
</form>
thanks guys...

Getting Selected Values from Radiobuttonlist and Checkboxlist in ListView ASP.NET

I'm creating a quiz application in ASP.NET, I've displayed the Question and Answer using ListView and used a DataPager for Next Previous button. I would like to know the code on how to retain answers per question.
This is static datatable binding. you can bind it with your database value.
aspx page like
<form id="form1" runat="server">
<div>
<asp:ListView runat="server" ID="lstQuestions" OnItemDataBound="lstQuestions_ItemDataBound">
<ItemTemplate>
<asp:Label runat="server" ID="lblQuestionNo" Text='<%# "Q. "+ Eval("No") %>'></asp:Label>
<asp:Label runat="server" ID="lblQuestion" Text='<%#Eval("Question") %>'></asp:Label><br />
Select Answer:
<br />
<asp:RadioButtonList ID="rdoAnswers" runat="server" RepeatColumns="2" RepeatDirection="Horizontal"></asp:RadioButtonList>
</ItemTemplate>
</asp:ListView>
</div>
</form>
aspx.cs page like:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//this portion is dynamic
//You can get questions from your database.
DataTable dt = new DataTable();
dt.Columns.Add("No", typeof(int));
dt.Columns.Add("Question");
for (int i = 1; i < 10; i++)
dt.Rows.Add(i, "Your Question -" + i);
lstQuestions.DataSource = dt;
lstQuestions.DataBind();
}
}
protected void lstQuestions_ItemDataBound(object sender, ListViewItemEventArgs e)
{
//this portion is dynamic
//You can get answers from your database.
RadioButtonList rdo = (RadioButtonList)e.Item.FindControl("rdoAnswers");
DataTable dt = new DataTable();
dt.Columns.Add("No", typeof(int));
dt.Columns.Add("Answers");
for (int i = 1; i < 5; i++)
dt.Rows.Add(i, "Your Answer -" + i);
rdo.DataSource = dt;
rdo.DataMember = "Answers";
rdo.DataValueField = "No";
rdo.DataBind();
}

asp.net GridView dynamic line creation with dropmenu as Textbox entry

I have found a dynamic gridview code that creates lines and saves the one you filled last.
In my code i want to parse the droplist selected value text instead of actually writing in the textbox.
I have managed to parse the selectedvalue text in a textbox and for one line everything goes fine, but when i try to create a second line the selected value becomes the same for both lines.
(example: lets say i have a ddl menu with the values "a,b" if i choose the a value first the textbox will be filled ok "a" value, but if i choose b for the second line it will be both "b".
I will be needing 9 textboxes but i have made a simple version of the code containing only 1 textbox for the sake of space.
HTML
<%# Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication4.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="height: 337px">
<asp:GridView ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false" OnSelectedIndexChanged="Gridview1_SelectedIndexChanged">
<Columns>
<asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
<asp:TemplateField HeaderText="Header 1">
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<FooterStyle HorizontalAlign="Right" />
<FooterTemplate>
<asp:Button ID="ButtonAdd" runat="server" Text="Add New Row"
OnClick="ButtonAdd_Click" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<br />
<br />
<br />
</div>
</form>
</body>
</html>
C# code
namespace WebApplication4
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
setInitialRow();
}
}
protected void Gridview1_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void ButtonAdd_Click(object sender, EventArgs e)
{
AddNewRowToGrid();
}
private void setInitialRow()
{
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("Column1", typeof(string)));
dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["Column1"] = string.Empty;
dt.Rows.Add(dr);
ViewState["CurrentTable"] = dt;
Gridview1.DataSource = dt;
Gridview1.DataBind();
}
private void AddNewRowToGrid()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["RowNumber"] = i + 1;
dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text;
rowIndex++;
}
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
Gridview1.DataSource = dtCurrentTable;
Gridview1.DataBind();
}
else
{
Response.Write("Viewstate is null");
}
SetPreviousData();
}
}
private void SetPreviousData()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
box1.Text = dt.Rows[i]["Column1"].ToString();
rowIndex++;
}
}
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}
So as you'd imagine i tried going
box1.Text = DropDownList1.SelectedValue.ToString();
I tried with view state, but generally i failed.
Thanks for any of the answers guys!
ASPX Page
<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
</asp:DropDownList>
Code Behind
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
SetPreviousData();
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
TextBox box1 = (TextBox)Gridview1.Rows[(dt.Rows.Count - 1)].Cells[1].FindControl("TextBox1");
box1.Text = DropDownList1.SelectedValue;
}
}
}
Another Approach you can try is you can directly place dropdownlist in gridview instead of textbox.

Gridview not showing up on the browser in debug

Good Day everyone,
I have a web application that is a basic input form. The input form has a dynamic gridview that allows users to enter any number of rows to enter trip information.
Most everything is working well except two aspects;
I have continued errors that say gridviewName is not in the current context
Finally the more important issue lies in the fact that my gridview does not appear in debug in the browser (regardless of the browser chosen).
I have researched this for a week now and I think I need a new set of eyes on this. What could I be missing in my codebehind and aspx pages to make my gridview show up and the CodeBehind page to recognize the designer file.
<%# Page Language="C#" AutoEventWireup="True" MasterPageFile="~/Site.Master" CodeBehind="intakeTripDetails.aspx.cs" Inherits="WebApplication2.TravelerInformation" %>
<asp:Content ID="intakeTripDets" ContentPlaceHolderID="MainContent" runat="server">
<fieldset>
<legend>Trip Details</legend>
<div class="input">
<p>Please enter trip details on the below form. You can add additional rows as needed for each leg of our trip.</p>
<br />
<asp:Label runat="server" ID="lblMessage" Text="" ></asp:Label><br />
<label>Flight Number(s)</label><asp:TextBox runat="server"></asp:TextBox>
<br /><br /><br /><br />
<asp:GridView ID="tripDetails" runat="server" ShowFooter="True" ShowHeaderWhenEmpty="True">
<Columns>
<asp:BoundField DataField="RowNumber" HeaderText="" />
<asp:TemplateField HeaderText="Arrival Date & Time" >
<ItemTemplate>
<asp:TextBox ID="arrivalDateTime" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Departure Date & Time">
<ItemTemplate>
<asp:TextBox ID="departDateTime" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Country">
<ItemTemplate>
<asp:DropDownList ID="countryList" runat="server" AutoPostBack="true" AppendDataBoundItems="true">
<asp:ListItem Value="-1">--SELECT--</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="City">
<ItemTemplate>
<asp:TextBox ID="city" runat="server">
</asp:TextBox>
</ItemTemplate>
<FooterStyle HorizontalAlign="Right" />
<FooterTemplate>
<asp:Button ID="btnAdd" runat="server" Text="Add New Row" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkRemove" runat="server">Remove</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<div class="btnfmt"><%--<asp:Button ID="prev" runat="server" Text="Previous: Traveler Information" />--%>
<asp:Button ID="submit" runat="server" text="Submit Trip"/> </div>
</div>
</fieldset> </asp:Content>
CodeBehind:
using System;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace travelDetails
{
public partial class DynamicGrid : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SetInitialRow();
}
}
private ArrayList countryData()
{
ArrayList arr = new ArrayList();
arr.Add(new ListItem("Afghanistan", "1"));
arr.Add(new ListItem("Aland Islands", "2"));
arr.Add(new ListItem("Albania", "3"));
arr.Add(new ListItem("Algeria", "4"));
arr.Add(new ListItem("American Samoa", "5"));
arr.Add(new ListItem("Andorra", "6"));
arr.Add(new ListItem("Angola", "7"));
arr.Add(new ListItem("Anguilla", "8"));
arr.Add(new ListItem("Antarctica", "9"));
arr.Add(new ListItem("Antigua and Barbuda", "10"));
arr.Add(new ListItem("Argentina", "11"));
arr.Add(new ListItem("Armenia", "12"));
arr.Add(new ListItem("Aruba", "13"));
arr.Add(new ListItem("Australia", "14"));
arr.Add(new ListItem("Austria", "15"));
arr.Add(new ListItem("Azerbaijan", "16"));
arr.Add(new ListItem("Bahamas", "17"));
arr.Add(new ListItem("Bahrain", "18"));
arr.Add(new ListItem("Bangladesh", "19"));
arr.Add(new ListItem("Barbados", "20"));
return arr;
}
private void FillDropDownList(DropDownList ddl)
{
ArrayList arr = countryData();
foreach (ListItem item in arr)
{
ddl.Items.Add(item);
}
}
private void SetInitialRow()
{
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("arrivalDateTime", typeof(DateTime)));
dt.Columns.Add(new DataColumn("departDateTime", typeof(DateTime)));
dt.Columns.Add(new DataColumn("city", typeof(string)));
dt.Columns.Add(new DataColumn("countryList", typeof(string)));
dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["arrivalDateTime"] = string.Empty;
dr["departDateTime"] = string.Empty;
dr["city"] = string.Empty;
dt.Rows.Add(dr);
//What if I want to see the data for future reference
ViewState["CurrentTable"] = dt;
//Data is stuck here
tripDetails.DataSource = dt;
tripDetails.DataBind();
DropDownList ddl1 = (DropDownList)tripDetails.Rows[0].Cells[4].FindControl("countryList");
FillDropDownList(ddl1);
}
private void AddNewRowToGrid()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["RowNumber"] = dtCurrentTable.Rows.Count + 1;
for (int i = 0; i < dtCurrentTable.Rows.Count - 1; i++)
{
//extract the textbox values
TextBox box1 = (TextBox)tripDetails.Rows[i].Cells[1].FindControl("arrivalDateTime");
TextBox box2 = (TextBox)tripDetails.Rows[i].Cells[2].FindControl("departDateTime");
TextBox box3 = (TextBox)tripDetails.Rows[i].Cells[3].FindControl("city");
dtCurrentTable.Rows[i]["arrivalDateTime"] = box1.Text;
dtCurrentTable.Rows[i]["departDateTime"] = box2.Text;
dtCurrentTable.Rows[i]["city"] = box3.Text;
//extract the ddl values
DropDownList ddl1 = (DropDownList)tripDetails.Rows[i].Cells[4].FindControl("countryList");
//Update the DataRow with the ddl items selected
dtCurrentTable.Rows[i]["countryList"] = ddl1.SelectedItem.Text;
}
//Adds new row to the data table
dtCurrentTable.Rows.Add(drCurrentRow);
//Again...we probably want to refer to this again
ViewState["CurrentTable"] = dtCurrentTable;
//Rebind the grid with the current data
tripDetails.DataSource = dtCurrentTable;
tripDetails.DataBind();
}
else
{
Response.Write("View State is Null");
}
//Set previous data on postbacks
SetPreviousData();
}
}
private void SetPreviousData()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
TextBox box1 = (TextBox)tripDetails.Rows[i].Cells[2].FindControl("arrivalDateTime");
TextBox box2 = (TextBox)tripDetails.Rows[i].Cells[3].FindControl("departDateTime");
TextBox box3 = (TextBox)tripDetails.Rows[i].Cells[4].FindControl("city");
DropDownList ddl1 = (DropDownList)tripDetails.Rows[rowIndex].Cells[4].FindControl("countryList");
//Fill the ddl with data
FillDropDownList(ddl1);
if (i < dt.Rows.Count - 1)
{
//Assign the value from the datatable to the textbox
box1.Text = dt.Rows[i]["arrivalDateTime"].ToString();
box2.Text = dt.Rows[i]["departDateTime"].ToString();
box3.Text = dt.Rows[i]["city"].ToString();
//Set the previously selected items to each ddl
ddl1.ClearSelection();
ddl1.Items.FindByText(dt.Rows[i]["countryList"].ToString()).Selected = true;
}
rowIndex++;
}
}
}
}
protected void btnAdd_Click(object sender, EventArgs e)
{
AddNewRowToGrid();
}
protected void tripDetails_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
LinkButton lb = (LinkButton)e.Row.FindControl("lnkRemove");
if (lb != null)
{
if (dt.Rows.Count > 1)
{
if (e.Row.RowIndex == dt.Rows.Count - 1)
{
lb.Visible = true;
}
}
else
{
lb.Visible = true;
}
}
}
}
protected void lnkRemove_Click(object sender, EventArgs e)
{
LinkButton lb = (LinkButton)sender;
GridViewRow gvRow = (GridViewRow)lb.NamingContainer;
int rowID = gvRow.RowIndex;
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 1)
{
if (gvRow.RowIndex < dt.Rows.Count - 1)
{
//Remove selected row data and reset row number
dt.Rows.Remove(dt.Rows[rowID]);
ResetRowID(dt);
}
}
//And another future reference
ViewState["CurrentTable"] = dt;
//Bind the data to the gridview again with updated data
tripDetails.DataSource = dt;
tripDetails.DataBind();
}
//Set previous data on postback
SetPreviousData();
}
private void ResetRowID(DataTable dt)
{
int rowNumber = 1;
if (dt.Rows.Count > 0)
{
foreach (DataRow row in dt.Rows)
{
row[0] = rowNumber;
rowNumber++;
}
}
}
I have tried everything that I can think of -
1. Deleting Designer file and 'Converting to Web Application'
2. Redoing the code in another file
3. Recreating the whole project
4. Making everything visible/invisible
Any help would be great!
Edit:
Okay update, I have made some changes and now I have errors that indicate The type or namespace name 'DataBind' does not exist in the namespace 'tripDetails' (are you missing an assembly reference?). This error shows for 'DataBind' 'DataSource' and 'Rows.
What am I missing in my references or namespaces that could be causing these errors. I did not make any changes to this area.
Update I was able to finally clear all the errors but I still cannot see my empty gridview in the browsers. Anyone?
I think you have confused ID and Name. Name allows data to be assigned or retrieved from a control.
Change ID="tripDetails" to name="tripDetails" and it should work. Similarly, i'd then advise doing the same for the rest of the controls.

Grabbing values of genered ListBox ASP Controls inside ListView On PostBack

So I've got this:
<asp:ListView runat="server" ID="lvAttributes" DataKeyNames="attribute_id" OnItemDataBound="lvAttributes_ItemDataBound">
<ItemTemplate>
<label class="title">product <%# Eval("name") %></label>
<asp:ListBox DataTextField="value" DataValueField="tag_id" CssClass="chzn-select"
runat="server" ID="lbAttributeTags"></asp:ListBox>
<br />
</ItemTemplate>
<LayoutTemplate>
<div id="itemPlaceholder" runat="server"></div>
</LayoutTemplate>
</asp:ListView>
Now on post back I'd like to get each individual lbAttributeTags selected value. But as you know there might be a single ListBox generated or 100. So how should I approach a solution for this for the many potential possibilities?
Thanks in advance.
Here you have the code to fetch the selected item from the ListBox inside the list view control
asp.net
<form id="form1" runat="server">
<div>
</div>
<asp:ListView runat="server" ID="lvAttributes" DataKeyNames="attribute_id" OnItemDataBound="lvAttributes_ItemDataBound">
<ItemTemplate>
<label class="title">product <%# Eval("name") %></label>
<asp:ListBox DataTextField="value" DataValueField="tag_id" CssClass="chzn-select"
runat="server" ID="lbAttributeTags"></asp:ListBox>
<asp:Button ID="btnInsideLV" runat="server" Text="Inside LV Click" OnCommand="btnInsideLV_Click" CommandArgument='<%# Container.DataItemIndex + 1 %>' /><br />
</ItemTemplate>
<LayoutTemplate>
<div id="itemPlaceholder" runat="server"></div>
</LayoutTemplate>
</asp:ListView>
<asp:Button ID="btnSample" runat="server" Text="Click" OnClick="btnSample_Click" />
<asp:Label ID="lblDisplay" runat="server" />
<asp:Label ID="lblSelectedRowValue" runat="server" />
</form>
c#:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class stackoverflow_12761515 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("name");
dt.Columns.Add("attribute_id");
for (int i = 0; i < 5; i++)
{
DataRow dr = dt.NewRow();
dr["attribute_id"] = i + 1;
dr["name"] = "item " + i + 1;
dt.Rows.Add(dr);
}
lvAttributes.DataSource = dt;
lvAttributes.DataBind();
//BindListBox();
}
}
private void BindListBox(ListBox lb)
{
DataTable dt = new DataTable();
dt.Columns.Add("value");
dt.Columns.Add("tag_id");
for (int i = 0; i < 5; i++)
{
DataRow dr = dt.NewRow();
dr["tag_id"] = i + 1;
dr["value"] = "value " + i + 1;
dt.Rows.Add(dr);
}
//ListBox lb = (ListBox)lvAttributes.FindControl("lbAttributeTags");
lb.DataSource = dt;
lb.DataTextField = "value";
lb.DataValueField = "tag_id";
lb.DataBind();
}
protected void lvAttributes_ItemDataBound(object sender, ListViewItemEventArgs e)
{
ListBox lb = (ListBox)e.Item.FindControl("lbAttributeTags");
BindListBox(lb);
}
protected void btnSample_Click(object sender, EventArgs e)
{
lblDisplay.Text = string.Empty;
for (int i = 0; i < lvAttributes.Items.Count; i++)
{
ListBox lb = (ListBox)lvAttributes.Items[i].FindControl("lbAttributeTags");
if (lb.SelectedIndex != -1)
{
lblDisplay.Text += lb.SelectedItem.Text + "\n";
}
}
}
protected void btnInsideLV_Click(object sender, CommandEventArgs e)
{
int selectedRow = Convert.ToInt32(e.CommandArgument.ToString());
ListBox lbCurrent = (ListBox)lvAttributes.Items[selectedRow - 1].FindControl("lbAttributeTags");
if (lbCurrent.SelectedIndex != -1)
{
lblSelectedRowValue.Text = "Row selected is : " + selectedRow + " and list item is : " + lbCurrent.SelectedItem.Text;
}
else
{
lblSelectedRowValue.Text = "no item selected";
}
}
}
The 2 button click events have the code which you required. Please let me know if you need anything else.

Categories