472,958 Members | 2,133 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,958 software developers and data experts.

Dynamic Datagrid UserControl Event Handling

Hi all,

I don't normally post swathes of code like this but I am truly banging
my head off my desk here...
I've dynamically created a datagrid within a usercontrol. There are two
columns which contain buttons to Edit & Delete rows. For some reason,
the ItemCommand event which these should be connected to isn't firing.

I know this is a lot of code, but I've been through a hell of a lot of
forums and tutorials on this matter and just can't track down the
problem. There is either something tiny I have missed or something
fundemental I'm doing wrong. I would really really appreciate it if
someone could look over this for me.
Here's the .ascx:

<%@ Control Language="C#" src="../cs/resultsgrid.cs"
Inherits="resultsgrid" %>
<asp:placeholder runat="server" id="gridholder"/>

Here's the .cs behind it:

using System;
using System.Data;
using System.Data.OleDb;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

public class resultsgrid: UserControl {

protected string theRequest;
protected string cs;
protected OleDbConnection conn;
protected OleDbConnection oleConnection;
protected DataGrid grid = new DataGrid();

protected void g_ItemCreated (Object s, DataGridItemEventArgs e)
{
this.grid.ItemCommand += new

System.Web.UI.WebControls.DataGridCommandEventHand ler(this.ItemsGrid_Command);

}

override protected void OnInit(EventArgs e)
{
this.grid.ItemCreated += new
DataGridItemEventHandler(this.g_ItemCreated);
makeGrid();
}

protected void makeGrid()
{
theRequest = Request.QueryString["page"];
cs = (string)Application["dbConnectionString"];

string sql;
OleDbDataReader dtrAdmin;
OleDbConnection conn = new OleDbConnection( cs );

if (theRequest != null)
{
HtmlForm myForm = new HtmlForm();
this.FindControl("gridholder").Controls.Add(myForm );
this.FindControl("gridholder").Controls[0].Controls.Add(grid);

grid.AutoGenerateColumns = false;

grid.ShowHeader = false;
grid.BorderColor = System.Drawing.Color.FromName("White");
grid.AlternatingItemStyle.BackColor =
System.Drawing.Color.FromName("White");
oleConnection = new OleDbConnection(cs);

/////// LOOK UP details of this table in the admin table ///////
sql = "SELECT * FROM admin WHERE name='"+theRequest+"'";

OleDbCommand oleCommand = new OleDbCommand(sql,oleConnection);

oleConnection.Open();
dtrAdmin = oleCommand.ExecuteReader();
dtrAdmin.Read();
string select = dtrAdmin["select"].ToString();
string display = (string)dtrAdmin["display"];
oleConnection.Close();

//////// SPLIT the select and display strings into arrays ////////
string delimStr = ",";
char [] delimiter = delimStr.ToCharArray();

string[] selectArray = select.Split(delimiter);
string[] displayArray = display.Split(delimiter);

// add the id column no matter what
BoundColumn colm = new BoundColumn();
colm.DataField = "id";
grid.Columns.Add(colm);

//////// ADD CONTROLS - boundcolumn controls for each field to display
foreach (string str in displayArray) {
// don't add the ID column as we just did that.
if (str != "id")
{
BoundColumn col = new BoundColumn();
col.DataField = str;
grid.Columns.Add(col);
}
}

//////// ADD CONTROLS - button columns - NOTE - BEFORE DATABIND
ButtonColumn edit = new ButtonColumn();
edit.ButtonType = ButtonColumnType.LinkButton;
edit.CommandName = "Edit";
edit.Text = "Edit";
grid.Columns.Add(edit);

ButtonColumn delete = new ButtonColumn();
delete.ButtonType = ButtonColumnType.LinkButton;
delete.CommandName = "Delete";
delete.Text = "Delete";
grid.Columns.Add(delete);

grid.ItemCommand += new
DataGridCommandEventHandler(this.ItemsGrid_Command );

if (!IsPostBack)
{
bindGrid();
}
this.grid.ItemCommand += new

System.Web.UI.WebControls.DataGridCommandEventHand ler(this.ItemsGrid_Command);

}
}
void bindGrid() {
//////// GET DATA - actually obtain the data for the DataGrid
string sql = "SELECT * FROM "+theRequest+" ORDER BY id DESC";

OleDbDataReader dtrQuery;
OleDbCommand oleCommand = new OleDbCommand(sql,oleConnection);

oleConnection.Open();
dtrQuery = oleCommand.ExecuteReader();
grid.DataSource = dtrQuery;
grid.DataBind();
oleConnection.Close();

}

void ItemsGrid_Command (Object s, DataGridCommandEventArgs e)
{
Response.Write("test");

string cmd = ((LinkButton)e.CommandSource).CommandName;

if (cmd == "Edit")
{
editItem(e);
}
else if (cmd == "Delete")
{
deleteItem(e);
}
}

protected void deleteItem (DataGridCommandEventArgs e)
{
// grab the text in the first cell of the row which was clicked
TableCell itemCell = e.Item.Cells[0];
string item = itemCell.Text;

// the query string will contain the name of the current page we are
editing
string theRequest = Request.QueryString["page"];

string sql = "DELETE FROM "+theRequest+" WHERE name='"+item+"'";

OleDbConnection oleConnection = new OleDbConnection(cs);
OleDbCommand oleCommand = new OleDbCommand(sql,oleConnection);

oleConnection.Open();
oleCommand.ExecuteNonQuery();
oleConnection.Close();

bindGrid();
}

protected void editItem (DataGridCommandEventArgs e)
{
// put "page" from the query string into a nice var
theRequest = Request.QueryString["page"];

TableCell itemCell = e.Item.Cells[0];
string item = itemCell.Text;
Response.Redirect("default.aspx?mode=edit&id="+ite m+"&edit=true&page="+theRequest);
}
}
Nov 18 '05 #1
0 1942

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Daniel Armstrong | last post by:
Hello, I have a usercontrol that I have built that has a single generic datagrid. When setting up the inital properties I build the template columns for the datagrid dynamically so it can...
1
by: Shourie | last post by:
I've noticed that none of the child controls events are firing for the first time from the dynamic user control. Here is the event cycle. 1) MainPage_load 2) User control1_Load user clicks a...
0
by: Colin Ramsay | last post by:
Hi all, I don't normally post swathes of code like this but I am truly banging my head off my desk here... I've dynamically created a datagrid within a usercontrol. There are two columns...
2
by: John Ninan | last post by:
I am creating Dynamic Usercontrol in Asp.net application. In this application I have a combobox(aspx Page). Which contains various items. Based on item selected I am dynamically populating...
3
by: Leo J. Hart IV | last post by:
OK, here's another question for the experts: I am building a multi-step (3 steps actually) form using a panel for each step and hiding/displaying the appropriate panel/panels depending on which...
4
by: Luca | last post by:
HI, I've a asp.net application that add a dynamic usercontrol with a button. If i've tried to click it Click Event don't load. But into a static usercontrol it's happens. Anyone can help me?
0
by: jonelling | last post by:
I am having a problem where the page load event is not being fired for certain user controls that I load dynamically in placeholders. Here is what I'm doing in brief, with full test code supplied...
2
by: Developer_Software | last post by:
Thanks in advance to anyone who can help :) I've got a placeholder control WITHIN A USER CONTROL that has its contents dynamically added and removed at runtime by a regular .aspx page. At...
3
by: s.bussing | last post by:
Hi, I have been reading for hours now, but I'm still not able to solve my problem, though a lot of people are struggling with something similar. On my page I have a nested repeater. In the inner...
2
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 4 Oct 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM) The start time is equivalent to 19:00 (7PM) in Central...
0
by: Aliciasmith | last post by:
In an age dominated by smartphones, having a mobile app for your business is no longer an option; it's a necessity. Whether you're a startup or an established enterprise, finding the right mobile app...
2
by: giovanniandrean | last post by:
The energy model is structured as follows and uses excel sheets to give input data: 1-Utility.py contains all the functions needed to calculate the variables and other minor things (mentions...
4
NeoPa
by: NeoPa | last post by:
Hello everyone. I find myself stuck trying to find the VBA way to get Access to create a PDF of the currently-selected (and open) object (Form or Report). I know it can be done by selecting :...
3
NeoPa
by: NeoPa | last post by:
Introduction For this article I'll be using a very simple database which has Form (clsForm) & Report (clsReport) classes that simply handle making the calling Form invisible until the Form, or all...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 1 Nov 2023 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM) Please note that the UK and Europe revert to winter time on...
3
by: nia12 | last post by:
Hi there, I am very new to Access so apologies if any of this is obvious/not clear. I am creating a data collection tool for health care employees to complete. It consists of a number of...
0
NeoPa
by: NeoPa | last post by:
Introduction For this article I'll be focusing on the Report (clsReport) class. This simply handles making the calling Form invisible until all of the Reports opened by it have been closed, when it...
2
by: GKJR | last post by:
Does anyone have a recommendation to build a standalone application to replace an Access database? I have my bookkeeping software I developed in Access that I would like to make available to other...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.