GridView Editing when bound to a Datatable (no database) - asp.net

I am a beginner at ASP.NET and I have been trying to allow editing/updating of a GridView that is bound to a Datatable, without apparent success.
The GridView, named "WeightGridView", has two columns, "Asset Class" and "Weight", and is populated upon the click of a button "AddAssetsButton". Once you click on this button, the GridView will be populated with the values of a listbox, "ListBox2". The code for this event handler is:
protected void AddAssetsButton_Click(object sender, EventArgs e)
{
DataTable table = new DataTable();
table.Columns.Add("Asset Class", typeof(string));
table.Columns.Add("Weight", typeof(double));
foreach (ListItem li in ListBox2.Items)
{
DataRow dr = table.NewRow();
dr["Asset Class"] = li.Value;
dr["Weight"] = 0;
table.Rows.Add(dr);
}
WeightGridView.DataSource = table;
WeightGridView.DataBind();
SelectAssetsButton_ModalPopupExtender.Hide();
}
I have created a RowEditing and RowUpdating functions for the GridView, but they don't seem to work properly.
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
WeightGridView.DataBind();
}
}
protected void WeightGridView_RowEditing(object sender, GridViewEditEventArgs e)
{
WeightGridView.EditIndex = e.NewEditIndex;
}
protected void WeightGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string weight;
weight = ((TextBox)WeightGridView.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
WeightGridView.EditIndex = -1;
WeightGridView.DataBind();
}
Should you need any additional code to answer this post, please let me know and I will update the post.
Any help will be appreciated! Thank you!

Related

Changing the columns titles on a GridView if I set the datasource on codebehind?

How do I set the GridView Category Columns Titles manually if I'm databinding manually?
namespace Workforce
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var s = Work.DataLayer.Connection("test");
var x = Work.DataLayer.GetCourseList(s);
GridView1.DataSource = x;
GridView1.DataBind();
}
}
}
In the design view, there is a data source id which i'm not using.
How about this
GridView1.HeaderRow.Cells[0].Text = "New Header";
Like #Rahul stated, you want to do this in the RowDataBound event
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.Cells[0].Text = "Your Better Column Header";
}
}
And repeat for each row header you want to modify, ensuring you have used the correct ordinal number.

GridView | drop down lists gets unpopulate

The Drop Down Lists in the FooterTemplate gets unpopulate when clicking "update" on some row
this is the page load event when they gets populate:
protected void Page_Load(object sender, EventArgs e)
{
DropDownList ddlImages_new = ((DropDownList)gvAdminArticleAdd.FooterRow.FindControl("ddlImages_new"));
ddlImages_new.DataSource = GetPdfs();
ddlImages_new.DataBind();
DropDownList ddl_invNamesNew = ((DropDownList)gvAdminArticleAdd.FooterRow.FindControl("ddl_invNamesNew"));
ddl_invNamesNew.DataSource = GetInvestigatorNames();
ddl_invNamesNew.DataBind();
}
If I click the update linkButton on some row the data in the drop down lists are disappear
Even when try to call the page load on cancel event it didn't work.
protected void gvAdminArticleAdd_CancelEditEventHandler(object sender, GridViewCancelEditEventArgs e)
{
Page_Load(sender, e);
}
Bind your controls only when the page is not post back:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DropDownList ddlImages_new = ((DropDownList)gvAdminArticleAdd.FooterRow.FindControl("ddlImages_new"));
ddlImages_new.DataSource = GetPdfs();
ddlImages_new.DataBind();
DropDownList ddl_invNamesNew = ((DropDownList)gvAdminArticleAdd.FooterRow.FindControl("ddl_invNamesNew"));
ddl_invNamesNew.DataSource = GetInvestigatorNames();
ddl_invNamesNew.DataBind();
}
}

Adding a checkbox in a table cell

Is this possible?
I have a table with user accounts retrieved from a database. Then at the start of each column I would like to add a checkbox which if selected will select the account. I tried experimenting with it and I can't seem to put the checkbox inside the table. How can I do this?
You can try this:
const int ColumnSelect = 0;
protected void Page_Load(object sender, EventArgs e)
{
//Get real data here.
DataTable dt = new DataTable();
dt.Columns.Add("count");
dt.Rows.Add(dt.NewRow());
dt.Rows[0][0] = "5";
GridView1.Columns.Add(new TemplateField());
BoundField b = new BoundField();
GridView1.Columns.Add(b);
b.DataField = "count";
GridView1.DataSource = dt;
GridView1.DataBind();
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType != DataControlRowType.Header)
{
e.Row.Cells[ColumnSelect].Controls.Add(new CheckBox());
}
}
protected void Button1_Click(object sender, EventArgs e)
{
foreach(GridViewRow row in GridView1.Rows)
{
//Could also use (CheckBox)row.Cells[ColumnSelect].FindControl if you give the checkboxes IDs when generating them.
CheckBox cb = (CheckBox)row.Cells[ColumnSelect].Controls[0];
if (cb.Checked)
{
//Do something here.
}
}
}

How to remove row from gridview on row command event?

I am trying to remove row from gridview by click on ImageButton which is placed inside gridview. I am getting row index but dont know how to remove. My gridview binds from session and i dont want to rebind gridview.
Here is my code:
protected void GVDetail_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("Remove"))
{
List<Class1> list = (List<Class1>)Session["value1"];
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow gridRow = gvDetail.Rows[index];// (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
((List<Class1>)Session["value1"]).RemoveAt(index);
}
}
If anyone have any idea about this than please help me..
Use the gridview deleterow method.
void GVDetail_RowCommand_RowCommand(Object sender, GridViewCommandEventArgs e)
{
if(e.CommandName=="Remove")
{
var id = Int32.Parse(e.CommandArgument);
GVDetail.DeleteRow(id);
}
}
protected void GVPurchaseOrderTax_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
try
{
if (dt.Rows.Count > 0)
{
dt.Rows[e.RowIndex].Delete();
GVPurchaseOrderTax.DataSource = dt;
GVPurchaseOrderTax.DataBind();
}
}
}

Linking database column to dropdown control in ASP.Net

I am using c# with asp.net and SQL Server 2005 as backend. I want to use dropdown list control in a form to populate a textbox. The dropdown control is linked to a column in the database. How can I code this in c#?
Do you mean this
protected void Page_Load(object sender, EventArgs e)
{
DropDownList1.datasource = list;
DropDownList1.datBind();
}
protected void DropDownList1_OnSelectedIndexChanged(object sender, EventArgs e)
{
TextBox1.Text = DropDownList1.SelectedValue;
}
Or this
protected void DropDownList1_OnSelectedIndexChanged(object sender, EventArgs e)
{
TextBox t = new TextBox();
t.Text = DropDownList1.SelectedValue;
body.InnerHtml.add(t);
}

Resources