Home > Enterprise >  Stuck trying to run a rowcommand across the whole gridview
Stuck trying to run a rowcommand across the whole gridview

Time:03-22

I need to run a rowcommand across all the elements of a gridview to save clerks some time but I'm stuck with an action. This is the button that triggers the action:

Protected Sub lbMasivo_Click(sender As Object, e As EventArgs) Handles lbMasivo.Click
        Dim args = New CommandEventArgs("GestionarCampoAdicional", "")
        For Each item As GridViewRow In gv1.Rows
            Dim arg = New GridViewCommandEventArgs(item, args)
            gv1_RowCommand(item, arg)
        Next
        ShowMessage(TipoMensaje.MsgError, "Done")
End Sub

Then in the original command there's this function that throws an exception (on gv1_rowcommand):

Dim row As GridViewRow = DirectCast(DirectCast(e.CommandSource, Control).NamingContainer, GridViewRow)

However, item is supposed to be a GridViewRow isn't it? As you might guess I'm not knowledgeable in vb or asp but I'm trying to learn.

CodePudding user response:

then you need to move the code out to a seperate routine for that row command. In other words, we ASSUME that you have a button OUTSIDE of the grid, say "check" all or whatever.

So, what is the code in the row command supposed to do? Without that information we are all VERY lost.

So, say I have gv, and I want a "check all" box?

Say like this:

<asp:GridView ID="GHotels" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="ID" css>
    <Columns>
        <asp:BoundField DataField="FirstName" HeaderText="FirstName" />
        <asp:BoundField DataField="LastName" HeaderText="LastName"   />
        <asp:BoundField DataField="City" HeaderText="City"           />
        <asp:BoundField DataField="HotelName" HeaderText="HotelName" />
        <asp:BoundField DataField="Description" HeaderText="Description"  />

        <asp:TemplateField HeaderText="Active" ItemStyle-HorizontalAlign="Center">
            <ItemTemplate>
                <asp:CheckBox ID="chkActive" runat="server"
                    Checked='<%# Eval("Active") %>'/>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Rating">
            <ItemTemplate>
                <asp:DropDownList ID="cboRating" runat="server"
                    DataValueField="ID"
                    DataTextField="Rating" >
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
        
<div style="float:right">
    <asp:Button ID="cmdCheckAll" runat="server" Text="Make All Active" CssClass="btn" />
</div>

Code to load the gv would be:

Dim rstCboChoice As DataTable
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        LoadGrid()
    End If

End Sub

Sub LoadGrid()

    rstCboChoice = MyRst("SELECT ID, Rating FROM tblRating ORDER BY ID")
    ' Now load our grid
    GHotels.DataSource = MyRst("SELECT * FROM tblHotelsA ORDER BY HotelName")
    GHotels.DataBind()

End Sub


Protected Sub GHotels_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GHotels.RowDataBound

    If e.Row.RowType = DataControlRowType.DataRow Then

        Dim cboRating As DropDownList = e.Row.FindControl("cboRating")
        cboRating.DataSource = rstCboChoice
        cboRating.DataBind()
        cboRating.Items.Insert(0, "Not Selected")
    End If

End Sub

And now we have this:

enter image description here

Now, we can check box each row. Or we can choose the button outside of the grid, and process EACH row, say like this:

Protected Sub cmdCheckAll_Click(sender As Object, e As EventArgs) Handles cmdCheckAll.Click

    For Each gRow As GridViewRow In GHotels.Rows

        Dim ckBox As CheckBox = gRow.FindControl("chkActive")
        ckBox.Checked = True

    Next

End Sub

So, whatever code you have or WANT to run and occur for each row, then you put it inside of the above loop. So, you not shared with us what kind of processing or code you need or want to run for each row, but whatever the heck that code is? You put it in the above loop.

  • Related