asp checkbox checking for OnCheckedChanged value

  • Thread starter Maziar Aflatoun
  • Start date
M

Maziar Aflatoun

Hi everyone,

I am reading and displaying data rows from my database where the first
column contains the Status checkbox. I like to enable my users to change
the status of individual rows by checking and unchecking the checkbox
column. I like to update the status in the database for the column where
the status was changed.

This is what I'm doing so far

<asp:datagrid id="MyDataGrid" runat="server" CellPadding="2"
AutoGenerateColumns="false" HeaderStyle-CssClass="maintableheader"
Width="95%">
<Columns>
<asp:BoundColumn DataField="BID" ReadOnly="True"
Visible="False"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="Active" Visible="True"
ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:CheckBox ID="Status" Runat="server" Checked='<%#
FormatStatus(DataBinder.Eval(Container.DataItem, "Status")) %>'
AutoPostBack=True OnCheckedChanged="UpdateCheckboxStatus">
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
....etc.

and in my .cs page

public void UpdateCheckboxStatus(object sender, System.EventArgs e)
{
Response.Write ("You click the row...")...
}

How can I find out which row was clicked? Please let me know if there is a
better way to do this.

Thank you
Maz
 
T

Teemu Keiski

Hi,

you get to the CheckBox's parent DataGridItem by utilizing the hierarchical
idea of Controls collection, meaning that get it via your Control's Parent
property.

public void UpdateCheckboxStatus(object sender, System.EventArgs e)
{
//Written into several lines to clarify, you could go with one line

//Current checkbox
CheckBox box=(CheckBox)sender;

//The TableCell the control is in
TableCell cell=(TableCell)box.Parent;

//The DataGridItem the cell belongs to
DataGridItem dgItem=(DataGridItem)cell.Parent;
}

With that DataGridItem you get for example ItemIndex of the DataGridItem you
are into. It is the same would be e.Item in ItemCommand,ItemDataBound or
ItemCreated. And you can then again get the PK of the current row and so on
via DataKeys collection.
 
Joined
Dec 29, 2008
Messages
2
Reaction score
0
checkbox control

I had a similar problem where I was trying to find out the row where the check box was clicked, then extract the "ID" -primary key value. What I did was the following. Inside the GridView I inserted a hyperlink template that used the <%# Eval("ID")%> function to assign its value to Text property.
After that in the handler I searched for this using FindControl() method.

So this is what I had inside the .aspx among the gridview columns:

<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink ID="LinkButtonID" runat="server" Text='<%# Eval("ID") %>' Visible="false" />
</ItemTemplate>
</asp:TemplateField>
...........
<asp:TemplateField HeaderText="Activated">
<ItemTemplate>
<asp:CheckBox ID="activatedcheckbox" runat="server" Checked='<%#Bind("Activated") %>'
OnCheckedChanged="UpdateActivationStatus" AutoPostBack="True" />
</ItemTemplate>
</asp:TemplateField>
...........
</Columns>

Now remember that I was using Linq as a data source to provide the table columns to the gridview, one of them being the column "ID" in on of the db table.
You can use any other method of providing the SQL to the Gridview.

Here is the code behind:

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

Dim db As New CarGalleryDataContext
Dim chkbox As CheckBox = CType(sender, CheckBox)

Dim tblcell As TableCell = CType(chkbox.Parent, TableCell)

Dim dgRow As GridViewRow = CType(tblcell.Parent, GridViewRow)

'find the control that holds the ID value and cast it 'back to HyperLink type
Dim lnkHyperLink = CType(dgRow.FindControl("LinkButtonID"), HyperLink)

Dim listingID = lnkHyperLink.Text 'retreive listing ID

Dim listingauto As UserVehicle = (From l In db.UserVehicles _
Where l.ID.ToString = listingID _
Select l).Single

listingauto.Activated = chkbox.Checked

db.SubmitChanges() 'submit changes to db


End If

End Sub

This worked fine for me ,:captain:
Happy Coding !!!:stupido:
Radu_M
 
Last edited:

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top