From: DavidC on
I have the code below that runs when a textbox in an ItemTemplate changes. My
problem is that it always updates the 1st row. How can I change the value in
DataKeys to reflect the index of the row I am on?

p.s. I am using AutoPostback and UpdatePanel. Thanks.


Protected Sub txtWeek1Units_TextChanged(ByVal sender As Object, ByVal e
As System.EventArgs)
Dim txBox As TextBox = CType(sender, TextBox)
Dim intTempID As Int32 =
Convert.ToInt32(gvTimesheetEntry.DataKeys(0).Value)
Dim dblUnits As Double = 0
If txBox.Text <> "" Then
dblUnits = Convert.ToDouble(txBox.Text)
End If
Dim lbl As Label = LblMsg
If PayrollClass.UpdateTimesheetsTemp(intTempID, dblUnits, 1) = False
Then
lbl.CssClass = "Show"
lbl.Text = "Update of temporary timesheet entry failed for Week1
Units"
Else
lbl.CssClass = "Hide"
lbl.Text = ""
End If
End Sub
--
David
From: Mr. Arnold on
DavidC wrote:
> I have the code below that runs when a textbox in an ItemTemplate changes. My
> problem is that it always updates the 1st row. How can I change the value in
> DataKeys to reflect the index of the row I am on?
>
> p.s. I am using AutoPostback and UpdatePanel. Thanks.
>


Here is a ItemTemplete but it's a RadListView with ItemTemplete.


protected void RadListView_ItemCommand(object sender,
RadListViewCommandEventArgs e)
{
if (e.CommandName == RadListView.UpdateCommandName)
{
var groupID =
(int)((RadListViewDataItem)e.ListViewItem).GetDataKeyValue("GroupID");
//rest of the code
}
}

It's going to be some e.Item that's going to point you to the DataKey of
the Grid row selected.


I also think you can get the datakey at the OnSelectedIndexChanged on
the gridview.

var key = gridview1.selected.value with postback.

You would save it to do hidden field and retive the key from hidden
field for later usage.


You can also catch it at ItemBound doing something with the e.Item like
it's being done with ItemCommand()above.


From: Andy O'Neill on

"Mr. Arnold" <Arnold(a)Arnold.com> wrote in message
news:%23gXAfL1tKHA.3904(a)TK2MSFTNGP02.phx.gbl...
> DavidC wrote:
>> I have the code below that runs when a textbox in an ItemTemplate
>> changes. My problem is that it always updates the 1st row. How can I
>> change the value in DataKeys to reflect the index of the row I am on?
>>
>> p.s. I am using AutoPostback and UpdatePanel. Thanks.
>>
>
>
> Here is a ItemTemplete but it's a RadListView with ItemTemplete.
>
>
> protected void RadListView_ItemCommand(object sender,
> RadListViewCommandEventArgs e)
> {
> if (e.CommandName == RadListView.UpdateCommandName)
> {
> var groupID =
> (int)((RadListViewDataItem)e.ListViewItem).GetDataKeyValue("GroupID");
> //rest of the code
> }
> }
>
> It's going to be some e.Item that's going to point you to the DataKey of
> the Grid row selected.
>
>
> I also think you can get the datakey at the OnSelectedIndexChanged on the
> gridview.
>
> var key = gridview1.selected.value with postback.
>
> You would save it to do hidden field and retive the key from hidden field
> for later usage.
>
>
> You can also catch it at ItemBound doing something with the e.Item like
> it's being done with ItemCommand()above.
>
>

In your xhtml for your gridview you need datakeynames="fieldname"
That gives you a collection of DataKeys
So in csharp
DataKey dk = gv.DataKeys[index]
int MyId =(int)dk.Values["fieldname"]

Personally, I would have a button or something in my row.
I reckon the simplest way is to have an explicit row command.
Then something like

protected void gv_RowCommand(object sender, GridviewCommandArguments e)
{
if e.commandbame.equals("thebuttoncommand"))
{
int index = convert.toint32(e.commandargument);



Then the above code with the datakeys to give you the id of your record,
pass that into your object/datalayer/whatever.

From: DavidC on
I tried the SelectedIndexChanged event but I do not want to have to "select"
the row before doing anything. I just want the user to enter data into the
textbox, update the underlying database record (based on the DataKey value)
and then move down to the next row (via user tabbing to it) and do the same
thing with multiple rows. Picture a list of rows where each row is updated
as data is entered in the textbox. Does this change anything in your
recommendation? I am not sure the ItemCommand fires each time the cursor
moves down to the new row. Thanks.
--
David


"Mr. Arnold" wrote:

> DavidC wrote:
> > I have the code below that runs when a textbox in an ItemTemplate changes. My
> > problem is that it always updates the 1st row. How can I change the value in
> > DataKeys to reflect the index of the row I am on?
> >
> > p.s. I am using AutoPostback and UpdatePanel. Thanks.
> >
>
>
> Here is a ItemTemplete but it's a RadListView with ItemTemplete.
>
>
> protected void RadListView_ItemCommand(object sender,
> RadListViewCommandEventArgs e)
> {
> if (e.CommandName == RadListView.UpdateCommandName)
> {
> var groupID =
> (int)((RadListViewDataItem)e.ListViewItem).GetDataKeyValue("GroupID");
> //rest of the code
> }
> }
>
> It's going to be some e.Item that's going to point you to the DataKey of
> the Grid row selected.
>
>
> I also think you can get the datakey at the OnSelectedIndexChanged on
> the gridview.
>
> var key = gridview1.selected.value with postback.
>
> You would save it to do hidden field and retive the key from hidden
> field for later usage.
>
>
> You can also catch it at ItemBound doing something with the e.Item like
> it's being done with ItemCommand()above.
>
>
> .
>
From: Mr. Arnold on
DavidC wrote:
> I tried the SelectedIndexChanged event but I do not want to have to "select"
> the row before doing anything. I just want the user to enter data into the
> textbox, update the underlying database record (based on the DataKey value)
> and then move down to the next row (via user tabbing to it) and do the same
> thing with multiple rows. Picture a list of rows where each row is updated
> as data is entered in the textbox. Does this change anything in your
> recommendation? I am not sure the ItemCommand fires each time the cursor
> moves down to the new row. Thanks.

Then you need a Edit Template with a asp:Edit button with property
Command="Edit". The Edit template can have this asp:textbox as a control.

Then you're going to need a Update Template with an asp:Button
Text="Update" Command="Update" and an asp:Button Text="Cancel"
Command="Cancel".

And it's still on the GrivView_ItemCommand(object sender, EventArgs e)
like the example previously provided to you but a 3rd party
<telrick:RadListView> control.

It's the same thing, which is off of e.Item as the item in the grid you
are working on.

protected void RadListView_ItemCommand(object sender,
RadListViewCommandEventArgs e)
{
if (e.CommandName == "Update")
{
var groupID =
(int)((RadListViewDataItem)e.ListViewItem).GetDataKeyValue("GroupID");

//rest of the code -- You can run off to the database and do it.
}
}