ImageButton loses CommandArgument

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • =?Utf-8?B?QmlnbG9vcHk=?=

    ImageButton loses CommandArgument

    I have a datagrid which I am adding BoundColumns to it programatically .
    Tehre are already 5 columns defined in the aspx as template columns, two link
    buttons and two image buttons. The datagrid should dsiplay the two link
    buttons, then the dynamically generated bound columns, then the 3 image
    buttons. The problem is when I insert the BoundColumns into the grid using
    the DataGrid.AddAt function I lose the databinding on the CommandArgument of
    the image buttons when capturing the OnCommand event. The explictly
    instantiated command however does keep its value.

    The sender and CommandEventArg s are almost useless to me at this point, it
    is supopsed to contain the ID of the row of data it represents. If I could
    get the number iof the row in terms of the datagrid I could work around it by
    using the DataKeys collection. DO I need to do something special in the
    databinding or viewstate? One way or another I need to figure out which row
    I clicked on, either in context of the data grid itself or the ID of the row
    of data.
  • George Ter-Saakov

    #2
    Re: ImageButton loses CommandArgument

    I feel your pain :)

    Here is the way I do it

    1. Drop somewhere on a page a LinkButton (let say with id = LinkButton1),
    wire up Click event to LinkButton1_OnC lick
    2. Make a Text property empty... We do not want to see that LinkButton. It's
    a decoy to generate Click event

    3. In every row of your datagrid instead of button have it like this
    <input type="button" OnClick="__doPo stBack('LinkBut ton1','<%#Eval( "ID")%>')"
    >
    NOTE: not a server control. Just plain html. you can have a link if you want
    to..
    like <a
    href="javascrip t:__doPostBack( 'LinkButton1',' <%#Eval("ID")%> ')">Click Me
    </a>

    4. in LinkButton1_OnC lick get the row ID by reading __EVENTARGUMENT
    int iRowId = Int32.Parse(Req uest.Form["__EVENTARGUMEN T"]);


    PS: code is simplified to make it clear.
    In reality you will need to use LinkButton1.Cli entID instead of hardcoded
    value 'LinkButton1'

    So <a href="javascrip t:__doPostBack( 'LinkButton1',' <%#Eval("ID")%> ')">Click
    Me </a>
    will be
    <a
    href="javascrip t:__doPostBack( '<%=LinkButton1 .ClientID%>','< %#Eval("ID")%>' )">Click
    Me </a>


    Good luck.
    George.



    "Bigloopy" <Bigloopy@discu ssions.microsof t.comwrote in message
    news:8F859EF2-9425-4943-924C-597D2B03143E@mi crosoft.com...
    >I have a datagrid which I am adding BoundColumns to it programatically .
    Tehre are already 5 columns defined in the aspx as template columns, two
    link
    buttons and two image buttons. The datagrid should dsiplay the two link
    buttons, then the dynamically generated bound columns, then the 3 image
    buttons. The problem is when I insert the BoundColumns into the grid
    using
    the DataGrid.AddAt function I lose the databinding on the CommandArgument
    of
    the image buttons when capturing the OnCommand event. The explictly
    instantiated command however does keep its value.
    >
    The sender and CommandEventArg s are almost useless to me at this point, it
    is supopsed to contain the ID of the row of data it represents. If I
    could
    get the number iof the row in terms of the datagrid I could work around it
    by
    using the DataKeys collection. DO I need to do something special in the
    databinding or viewstate? One way or another I need to figure out which
    row
    I clicked on, either in context of the data grid itself or the ID of the
    row
    of data.

    Comment

    Working...