Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > Catching an SelectedIndexChanged event from a DropDownList inside a DataGrid

Reply
Thread Tools

Catching an SelectedIndexChanged event from a DropDownList inside a DataGrid

 
 
Dominic
Guest
Posts: n/a
 
      06-30-2003
Hi guys,

I'm not sure if this question belongs to FAQ, but I couldn't find a
concrete answer.

I created a Datagrid control using ItemTemplate, but it's NOT a
in-place editing datagrid. One of the columns of the data grid
contains a DropDownlist. I managed to create this datagrid control as
follows.

<asp:datagrid RunAt="server" id="dgItem" DataKeyField="ItemId"...
<columns>
<asp:TemplateColumn HeaderText="Category">
<ItemTemplate>
<aspropDownList RunAt="server" ID="ddlCategory" />
......

The code-behind source looks like

private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
dgTest.DataSource = GetItemList();
dgTest.DataBind();
}
}

private void OnItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item)
{
int itemId = (int)dgItem.DataKeys[e.Item.ItemIndex];

DropDownList ddlCategory =
(DropDownList)e.Item.FindControl("ddlCategory");
ddlCategory .DataSource = GetCateoryList();
ddlCategory .DataBind();
}
}

This approach works quite well to populate the drop-down list and the
grid itself. However, I have two questions here.

1. How can I catch the "SelectedItemChanged" event fired from the
drop-down-list "ddlCategory"?

One of the previous posting mentioned that we can catch ControlAdded
event and add the SelectedItemChanged event there....

private void dataGrid1_ControlAdded(object sender, ControlEventArgs e)
{
if(e.Control.GetType == typeof(ComboBox))
((DropDownList)e.Control).SelectedIndexChanged += new
System.EventHandler(dropDownList_SelectedIndexChan ged);
}

Unfortunately, ControlAdded event is only for WinForms, not WebForms
(Right??)

A possible alternative is to use event bubbling. However, this
involves subclassing the dropdownlist to raise bubble event. Right?

Other than the event bubbling, is there any other easier method? Some
codes for illustration will be much appreciated.

2. The above datagrid items actually contains subitems. It is
something like

HeaderA HeaderB HeaderC
Item1A Item1B Item1C
Item11A Item11B Item11C
Item12A Item12B Item12C
Item2A Item2B Item2C
Item21A Item22B Item22C

where Item11A and Item12A is the sub-item of Item1A, etc.

I implemented the above as two levels of datagrid. Item1 and Item2
belong to datagrid of level1, while Item11, 12, 21, etc are level2. As
illustrated in the first part of my question, I can easily catch the
ItemDataBound event of level1 datagrid. But, how can I catch the
ItemDataBound of level2 data grid?

Thanks again
Dominic
 
Reply With Quote
 
 
 
 
Dominic
Guest
Posts: n/a
 
      07-02-2003
Thank you for your reply. But I still don't quite get it.

Since there are multiple rows in a datagrid, there will be multiple
Dropdownlists (each one corresponds to one row). So, when
DG1DropDownList is called, which row does it correspond to this event?

Please also see my second question regarding ItemDataBound. This is a
similar question to the first one. Instead of catching the
SelectedItemChanged event from a dropdownlist inside a row of a
datagrid, this is a question about how to catch a ItemDataBound event
from a datagrid inside a row of a datagrid.

Thanks
Dominic
"Saravana" <(E-Mail Removed)> wrote in message news:<(E-Mail Removed)>...
> You can add event handler to dropdownlist like this,
> <asp:TemplateColumn headertext="Month">
> <ItemTemplate>
> <aspropDownList id="MonthACT" datavaluefield="Value"
> datatextfield="Name" DataSource="<%#oMonthDataSet%>" runat="server"
> OnSelectedIndexChanged="DG1DropDownListSelect" >
> </aspropDownList>
> </ItemTemplate>
> </asp:TemplateColumn>
> --
> Saravana
> Microsoft India Community Star,
> MCAD,SE,SD,DBA.
>
>
> "Dominic" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed) m...
> > Hi guys,
> >
> > I'm not sure if this question belongs to FAQ, but I couldn't find a
> > concrete answer.
> >
> > I created a Datagrid control using ItemTemplate, but it's NOT a
> > in-place editing datagrid. One of the columns of the data grid
> > contains a DropDownlist. I managed to create this datagrid control as
> > follows.
> >
> > <asp:datagrid RunAt="server" id="dgItem" DataKeyField="ItemId"...
> > <columns>
> > <asp:TemplateColumn HeaderText="Category">
> > <ItemTemplate>
> > <aspropDownList RunAt="server" ID="ddlCategory" />
> > .....
> >
> > The code-behind source looks like
> >
> > private void Page_Load(object sender, System.EventArgs e)
> > {
> > if (!IsPostBack)
> > {
> > dgTest.DataSource = GetItemList();
> > dgTest.DataBind();
> > }
> > }
> >
> > private void OnItemDataBound(object sender, DataGridItemEventArgs e)
> > {
> > if (e.Item.ItemType == ListItemType.Item)
> > {
> > int itemId = (int)dgItem.DataKeys[e.Item.ItemIndex];
> >
> > DropDownList ddlCategory =
> > (DropDownList)e.Item.FindControl("ddlCategory");
> > ddlCategory .DataSource = GetCateoryList();
> > ddlCategory .DataBind();
> > }
> > }
> >
> > This approach works quite well to populate the drop-down list and the
> > grid itself. However, I have two questions here.
> >
> > 1. How can I catch the "SelectedItemChanged" event fired from the
> > drop-down-list "ddlCategory"?
> >
> > One of the previous posting mentioned that we can catch ControlAdded
> > event and add the SelectedItemChanged event there....
> >
> > private void dataGrid1_ControlAdded(object sender, ControlEventArgs e)
> > {
> > if(e.Control.GetType == typeof(ComboBox))
> > ((DropDownList)e.Control).SelectedIndexChanged += new
> > System.EventHandler(dropDownList_SelectedIndexChan ged);
> > }
> >
> > Unfortunately, ControlAdded event is only for WinForms, not WebForms
> > (Right??)
> >
> > A possible alternative is to use event bubbling. However, this
> > involves subclassing the dropdownlist to raise bubble event. Right?
> >
> > Other than the event bubbling, is there any other easier method? Some
> > codes for illustration will be much appreciated.
> >
> > 2. The above datagrid items actually contains subitems. It is
> > something like
> >
> > HeaderA HeaderB HeaderC
> > Item1A Item1B Item1C
> > Item11A Item11B Item11C
> > Item12A Item12B Item12C
> > Item2A Item2B Item2C
> > Item21A Item22B Item22C
> >
> > where Item11A and Item12A is the sub-item of Item1A, etc.
> >
> > I implemented the above as two levels of datagrid. Item1 and Item2
> > belong to datagrid of level1, while Item11, 12, 21, etc are level2. As
> > illustrated in the first part of my question, I can easily catch the
> > ItemDataBound event of level1 datagrid. But, how can I catch the
> > ItemDataBound of level2 data grid?
> >
> > Thanks again
> > Dominic

 
Reply With Quote
 
 
 
 
Saravana
Guest
Posts: n/a
 
      07-04-2003
You are correct, there will one eventhandler for all the dropdownlist. In
that eventhanlder,
If your try to get parent object of source, then it will give the
datagriditem(row) in which that dropdownlist was changed. From dataitem you
can do whatever you want, but you cant get the rowindex directly. For
example, check out this event handler for dropdownlist in which i am
changing a hiddenitem value in that row when dropdownlist value is changed
in that row

Sub DG2DropDownListSelect(ByVal sender As Object, ByVal e As
System.EventArgs)

Dim oDropDownList As DropDownList

Dim oGenControl As System.Web.UI.HtmlControls.HtmlInputHidden

oDropDownList = CType(sender, DropDownList)

oGenControl = oDropDownList.Parent.FindControl("DataGrid2RecordS tate")

oGenControl.Value = "Changed"


End Sub


i hope you understand this approach...

--
Saravana
Microsoft India Community Star,
MCAD,SE,SD,DBA.


"Dominic" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) om...
> Thanks again for your response. I'm sorry if I didn't put my question
> more clearly. Let me try to understand your approach first. My
> understanding is that even though there may be multiple rows (each
> contains one one dropdownlist control), there is only one event
> handler DG1DropDownListSelect for all of the dropdownlist controls. Is
> that right? If this correct, I expect that there must be a way that
> the event handler can figure out which row it corresponds to. For
> example, below is the event handler.
>
>
> private void DG1DropDownListSelect(object sender, System.EventArgs e)
> {
> rowIndex = e.????
> }
>
> Thanks again
> Dominic
> "Saravana" <(E-Mail Removed)> wrote in message

news:<(E-Mail Removed)>...
> > when DG1Dropdownlist is called, it corresponds to the row in which you

have
> > changed dropdownlist value.
> >
> > --
> > Saravana
> > Microsoft India Community Star,
> > MCAD,SE,SD,DBA.
> >
> >
> > "Dominic" <(E-Mail Removed)> wrote in message
> > news:(E-Mail Removed) om...
> > > Thank you for your reply. But I still don't quite get it.
> > >
> > > Since there are multiple rows in a datagrid, there will be multiple
> > > Dropdownlists (each one corresponds to one row). So, when
> > > DG1DropDownList is called, which row does it correspond to this event?
> > >
> > > Please also see my second question regarding ItemDataBound. This is a
> > > similar question to the first one. Instead of catching the
> > > SelectedItemChanged event from a dropdownlist inside a row of a
> > > datagrid, this is a question about how to catch a ItemDataBound event
> > > from a datagrid inside a row of a datagrid.
> > >
> > > Thanks
> > > Dominic
> > > "Saravana" <(E-Mail Removed)> wrote in message

> > news:<(E-Mail Removed)>...
> > > > You can add event handler to dropdownlist like this,
> > > > <asp:TemplateColumn headertext="Month">
> > > > <ItemTemplate>
> > > > <aspropDownList id="MonthACT" datavaluefield="Value"
> > > > datatextfield="Name" DataSource="<%#oMonthDataSet%>" runat="server"
> > > > OnSelectedIndexChanged="DG1DropDownListSelect" >
> > > > </aspropDownList>
> > > > </ItemTemplate>
> > > > </asp:TemplateColumn>
> > > > --
> > > > Saravana
> > > > Microsoft India Community Star,
> > > > MCAD,SE,SD,DBA.
> > > >
> > > >
> > > > "Dominic" <(E-Mail Removed)> wrote in message
> > > > news:(E-Mail Removed) m...
> > > > > Hi guys,
> > > > >
> > > > > I'm not sure if this question belongs to FAQ, but I couldn't find

a
> > > > > concrete answer.
> > > > >
> > > > > I created a Datagrid control using ItemTemplate, but it's NOT a
> > > > > in-place editing datagrid. One of the columns of the data grid
> > > > > contains a DropDownlist. I managed to create this datagrid control

as
> > > > > follows.
> > > > >
> > > > > <asp:datagrid RunAt="server" id="dgItem" DataKeyField="ItemId"...
> > > > > <columns>
> > > > > <asp:TemplateColumn HeaderText="Category">
> > > > > <ItemTemplate>
> > > > > <aspropDownList RunAt="server" ID="ddlCategory" />
> > > > > .....
> > > > >
> > > > > The code-behind source looks like
> > > > >
> > > > > private void Page_Load(object sender, System.EventArgs e)
> > > > > {
> > > > > if (!IsPostBack)
> > > > > {
> > > > > dgTest.DataSource = GetItemList();
> > > > > dgTest.DataBind();
> > > > > }
> > > > > }
> > > > >
> > > > > private void OnItemDataBound(object sender, DataGridItemEventArgs

e)
> > > > > {
> > > > > if (e.Item.ItemType == ListItemType.Item)
> > > > > {
> > > > > int itemId = (int)dgItem.DataKeys[e.Item.ItemIndex];
> > > > >
> > > > > DropDownList ddlCategory =
> > > > > (DropDownList)e.Item.FindControl("ddlCategory");
> > > > > ddlCategory .DataSource = GetCateoryList();
> > > > > ddlCategory .DataBind();
> > > > > }
> > > > > }
> > > > >
> > > > > This approach works quite well to populate the drop-down list and

the
> > > > > grid itself. However, I have two questions here.
> > > > >
> > > > > 1. How can I catch the "SelectedItemChanged" event fired from the
> > > > > drop-down-list "ddlCategory"?
> > > > >
> > > > > One of the previous posting mentioned that we can catch

ControlAdded
> > > > > event and add the SelectedItemChanged event there....
> > > > >
> > > > > private void dataGrid1_ControlAdded(object sender,

ControlEventArgs e)
> > > > > {
> > > > > if(e.Control.GetType == typeof(ComboBox))
> > > > > ((DropDownList)e.Control).SelectedIndexChanged += new
> > > > > System.EventHandler(dropDownList_SelectedIndexChan ged);
> > > > > }
> > > > >
> > > > > Unfortunately, ControlAdded event is only for WinForms, not

WebForms
> > > > > (Right??)
> > > > >
> > > > > A possible alternative is to use event bubbling. However, this
> > > > > involves subclassing the dropdownlist to raise bubble event.

Right?
> > > > >
> > > > > Other than the event bubbling, is there any other easier method?

Some
> > > > > codes for illustration will be much appreciated.
> > > > >
> > > > > 2. The above datagrid items actually contains subitems. It is
> > > > > something like
> > > > >
> > > > > HeaderA HeaderB HeaderC
> > > > > Item1A Item1B Item1C
> > > > > Item11A Item11B Item11C
> > > > > Item12A Item12B Item12C
> > > > > Item2A Item2B Item2C
> > > > > Item21A Item22B Item22C
> > > > >
> > > > > where Item11A and Item12A is the sub-item of Item1A, etc.
> > > > >
> > > > > I implemented the above as two levels of datagrid. Item1 and Item2
> > > > > belong to datagrid of level1, while Item11, 12, 21, etc are

level2. As
> > > > > illustrated in the first part of my question, I can easily catch

the
> > > > > ItemDataBound event of level1 datagrid. But, how can I catch the
> > > > > ItemDataBound of level2 data grid?
> > > > >
> > > > > Thanks again
> > > > > Dominic



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How to capture SelectedIndexchanged event of dropdownlist in Datagrid Shiva ASP .Net 3 06-14-2012 09:35 AM
Re: How to capture SelectedIndexchanged event of dropdownlist in Datagrid Arthur Dent ASP .Net 0 12-23-2004 02:28 AM
how do i access a dropdownlists selected value in a datagrid edititemtemplate column from the selectedindexchanged event of another dropdownlist in a datagrid edititemtemplate column Dave M ASP .Net Datagrid Control 0 12-14-2004 11:53 AM
Re: How to capture SelectedIndexchanged event of dropdownlist in Datagrid Shiva ASP .Net 0 11-17-2004 10:48 AM
Catching an SelectedIndexChanged event from a DropDownList inside a DataGrid Dominic ASP .Net Datagrid Control 2 07-04-2003 04:43 AM



Advertisments