e.Row.RowState

I’m building a GridView that contains edit/update capabilities.  In edit mode for certain rows I need to turn on a drop down list, and based on that row add/remove Items from the list, other rows I want to show a text input to edit, all based on Foreign Key for that row in the database (which I store in a DataKey to access).  I handle the OnRowDataBound with a custom subroutine.  This hasn?t been an issue in the past but this time I have multiple controls in the ItemTemplate and need to manipulate at databound time, which is a first. 

<EditItemTemplate>

<asp:DropDownList ID=?ddlAnswer? runat=?server? Visible=?False?>

<asp:ListItem Value=?Yes? Text=?Yes? />

<asp:ListItem Value=?No? Text=?No? />

<asp:ListItem Value=?Neutral? Text=?Neutral? />

</asp:DropDownList>

<asp:TextBox ID=?txtAnswer? runat=?server? Text=?<%# Bind(?Answer?) %>? Visible=?False?></asp:TextBox>

</EditItemTemplate>

 

Both have visible=false so I need to get at the bound event and flip one on and change the item list if it?s the DropDownList.

RowState

I find the e.Row.RowState property and assign an if conditional to DataControlRowState.Edit. 

 

If e.Row.RowState = DataControlRowState.Edit Then

 

?CHANGE UPDATE COMMAND ARGUMENT

CType(e.Row.FindControl(?lbUpdate?), LinkButton).CommandArgument = _

e.Row.RowIndex.ToString()

 

Dim iAnswerTypeID = CInt(gvEditSurveyResults.DataKeys(e.Row.RowIndex).Item(0))

?TURN ON CORRECT TYPE OF INPUT

Select Case CInt(gvEditSurveyResults.DataKeys(e.Row.RowIndex).Item(0))

Case 1

CType(e.Row.FindControl(?ddlAnswer?), DropDownList).Visible = True

CType(e.Row.FindControl(?ddlAnswer?), DropDownList).SelectedValue = _

CStr(gvEditSurveyResults.DataKeys(e.Row.RowIndex).Item(2))

 

Case 2

CType(e.Row.FindControl(?txtAnswer?), TextBox).Visible = True

 

Case 3

 

Case 4

CType(e.Row.FindControl(?txtAnswer?), TextBox).Visible = True

CType(e.Row.FindControl(?txtAnswer?), TextBox).TextMode = TextBoxMode.MultiLine

 

Case 5

CType(e.Row.FindControl(?ddlAnswer?), DropDownList).Visible = True

Dim oldListItem As ListItem = CType(e.Row.FindControl(?ddlAnswer?), DropDownList).Items.FindByValue(?Neutral?)

?REMOVE NEUTRAL

CType(e.Row.FindControl(?ddlAnswer?), DropDownList).Items.Remove(oldListItem)

?ADD NA

CType(e.Row.FindControl(?ddlAnswer?), DropDownList).Items.Add _

(New ListItem(CStr(gvEditSurveyResults.DataKeys(e.Row.RowIndex).Item(1)), CStr(gvEditSurveyResults.DataKeys(e.Row.RowIndex).Item(1))))

CType(e.Row.FindControl(?ddlAnswer?), DropDownList).SelectedValue = _

CStr(gvEditSurveyResults.DataKeys(e.Row.RowIndex).Item(2))

End Select

 

End If

 

This doesn?t work, I never get into the if block for all rows. Setting a debug point I find the state of the row is not always DataControlRowState.Edit, but sometimes Alternate with an enumeration of 5.  Looking thru Microsoft documentation I don?t see any 5 reference. 

My Assumption

I am assuming that every property of the DataControlRowState handler has an Alternate row of that plus 1.  So edit  = 4 and edit on an alternative row is 5.

Tim

A .NET, PHP, Marketing Guru authority, at least I hope I am. Reach me at tboland@gmail.com

12 thoughts on “e.Row.RowState

  1. Looks like a bug in the GridView control. ( e.Row.RowState == DataControlRowState.Edit ) is never true, even when I’ve clicked to edit the row. Instead, I have to check if( e.Row.RowIndex == MyGridView.EditIndex )

  2. The rowstate can either be:

    DataControlRowState.Edit or
    (DataControlRowState.Alternate | DataControlRowState.Edit)

    so your IF statement should display:

    If e.Row.RowState = DataControlRowState.Edit OR (e.Row.RowState = DataControlRowState.Alternate|DataControlRowState.Edit) Then

    The alternate tag is assigned to every odd index in the gridview. The tag is used for asthetic purposes (you can assign a different background color for every other line)

  3. Correction to my comment:

    If e.Row.RowState = DataControlRowState.Edit OR e.Row.RowState = (DataControlRowState.Alternate|DataControlRowState.Edit) Then

  4. I have something similare working like this:

    If Not e.Row.RowState = 5 And Not e.Row.RowState = DataControlRowState.Edit Then

    What is the | in your statement for? I have not seen that used before.

    Ryan

  5. Have you allowed down numerous academic writing services as they fail to return thru on their obligations regardless of their grand claims? Then, now that is the perfect time to make use of an UK Essays Buy Now which include allotted by means of UK Essays Help as they come thru on all their undertakings.

Leave a Reply

Your email address will not be published. Required fields are marked *