471,082 Members | 1,187 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,082 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

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 );

grid.AutoGenerateColumns = false;

grid.ShowHeader = false;
grid.BorderColor = System.Drawing.Color.FromName("White");
grid.AlternatingItemStyle.BackColor =
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);

dtrAdmin = oleCommand.ExecuteReader();
string select = dtrAdmin["select"].ToString();
string display = (string)dtrAdmin["display"];

//////// 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";

//////// 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;

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

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

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

if (!IsPostBack)
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);

dtrQuery = oleCommand.ExecuteReader();
grid.DataSource = dtrQuery;


void ItemsGrid_Command (Object s, DataGridCommandEventArgs e)

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

if (cmd == "Edit")
else if (cmd == "Delete")

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
string theRequest = Request.QueryString["page"];

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

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



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 1847

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

reply views Thread by Daniel Armstrong | last post: by
reply views Thread by Colin Ramsay | last post: by
2 posts views Thread by John Ninan | last post: by
3 posts views Thread by Leo J. Hart IV | last post: by
2 posts views Thread by Developer_Software | last post: by
3 posts views Thread by s.bussing | last post: by
reply views Thread by leo001 | last post: by

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.