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.
Hi, I think it’s the IF, have you tried:
e.Row.RowType == DataControlRowType.DataRow
Yes,
The above code is within an IF e.Row.RowType == DataControlRowType.DataRow block.
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 )
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)
Correction to my comment:
If e.Row.RowState = DataControlRowState.Edit OR e.Row.RowState = (DataControlRowState.Alternate|DataControlRowState.Edit) Then
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
Our dazzling collection of interior water walls will enthuse and impress anyone who sees it in your home or office.
hi chris, your alternate|edit concept was really helpful. thanks
thank you for your sharing , i love your post
Great things to do is ti make such articles
Thank you for sharing! Glad to find the article. It helps me learn many new things, hope to see more updates from you about html color picker and others matters.
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.