Search code examples
gridblazorsyncfusion

How to get selected row with custom action column using syncfusion in blazor?


I am using syncfusion grid in blazor.

Here is my Razor :

<div class="card-outer p-0">
        <div class="grid-table">
            <EjsGrid DataSource="@ManufacturedCoupons" AllowPaging="true">
                <GridPageSettings PageCount="5" PageSize="5"></GridPageSettings>
                <GridColumns>
                    <GridColumn Field=@nameof(Coupon.MaterialIdType) HeaderText="@CommonResource.MaterialID" Width="130" TextAlign="TextAlign.Center"></GridColumn>
                    <GridColumn Field=@nameof(Coupon.MaterialId) HeaderText="@CommonResource.MaterialID" Width="130" TextAlign="TextAlign.Center"></GridColumn>
                    <GridColumn Field=@nameof(Coupon.LotNo) HeaderText="@CommonResource.LotNo" Width="100" TextAlign="TextAlign.Center"></GridColumn>
                    <GridColumn Field=@nameof(Coupon.ArrivalDate) HeaderText="@CommonResource.DeliveryDate" TextAlign="TextAlign.Center" Width="150"></GridColumn>   
                    <GridColumn HeaderText="@CommonResource.Action" TextAlign="TextAlign.Center" Width="120">
                        <Template>
                            @{
                                <div class="actions">
                                    <a href="javascript:void(0);" title="@CommonResource.SendToStock"><img src="images/export.svg" alt="@CommonResource.SendToStock" @onclick="SendToStockClicked()"></a>
                                </div>
                            }
                        </Template>
                    </GridColumn>
                </GridColumns>
            </EjsGrid>
        </div>
    </div>

this is my method in code behind file :

  protected void SendToStockClicked(Coupon coupon)
        {

        }

I want to pass selected row data in this method on action button clicked.

How can I achive that ?


Solution

  • I'm not acquainted with syncfusion... I only know blazor. What I know from Blazor is that if you want to call a method and pass it a value you should use a lambda expression. Let's say that you have in your grid an object named MyCoupon of type Coupon, and you want to pass it to a local method called SendToStockClicked...This is how you call SendToStockClicked:

    @onclick="@(() => SendToStockClicked(MyCoupon))"
    

    Incidentally, this "javascript:void(0);" is JavaScript, and you shouldn't use JavaScript in Blazor...

    Hope this helps...

    EDIT

    You are half right. It indeed help me so I am marking it true but still I have to do some fixes which I am putting it here.

     <Template>
          @{
              var couponData = (context as Coupon);
              <div class="actions">
                 <a href="javascript:void(0);" 
                  title="@CommonResource.SendToStock" 
                   @onclick="(()=> SendToStockClicked(couponData))"> 
                    <img src="images/export.svg" 
                    alt="@CommonResource.SendToStock">
               </a>
                    </div>
          }
      </Template>
    

    Here I have to take couponData to send my custom method object.