bretbel
asked on
Disable or Halt EDIT in Gridview
I have a basic gridview report with EDIT enabled for UPDATING records. (VS 2005)
Is it possible to either disable or HALT the EDIT feature for an individual record based on if a cell in the gridview is not Null. Im able to capture the gridview's cell value thru 'row.cells' and am using the different gridview methods (rowupdating, rowupdated, rowediting, etc.)
I now need to either disable the EDIT feature for THAT PARTICULAR RECORD or just HALT the row updating process if cell is NOT NULL. Is there a code that just "kills" the process?
thanks for any assistance.
Is it possible to either disable or HALT the EDIT feature for an individual record based on if a cell in the gridview is not Null. Im able to capture the gridview's cell value thru 'row.cells' and am using the different gridview methods (rowupdating, rowupdated, rowediting, etc.)
I now need to either disable the EDIT feature for THAT PARTICULAR RECORD or just HALT the row updating process if cell is NOT NULL. Is there a code that just "kills" the process?
thanks for any assistance.
You could use M3mph15's solution, but just to clarify you have two ways of doing this:
Create your last column as a template column with link buttons and set the link buttons to have a CommandName of "Edit", "Delete", etc (whatever buttons you will need). Note that this method is a bit of a pain because you will have to manually swap out the Edit button and replace it with Update and Cancel buttons when you initiate the update.
The better path is to add a RowDataBound event to the gridview and check to see if the cell you're concerned about has a null value. If it does, you can do
foreach(Control c in row.Cells[MyCommandColumn# ].Controls )
{
if (typeof(c) == typeof(LinkButton) && ((LinkButton)c).Text == "Edit")
{
((LinkButton)c).Visible = false;
}
}
Your final alternative is within the rowediting event. You can check the cell value prior to doing anything. If the cell value is null, you can leave the gridview's EditIndex at -1 and then do a return; to exit out of the event.
Create your last column as a template column with link buttons and set the link buttons to have a CommandName of "Edit", "Delete", etc (whatever buttons you will need). Note that this method is a bit of a pain because you will have to manually swap out the Edit button and replace it with Update and Cancel buttons when you initiate the update.
The better path is to add a RowDataBound event to the gridview and check to see if the cell you're concerned about has a null value. If it does, you can do
foreach(Control c in row.Cells[MyCommandColumn#
{
if (typeof(c) == typeof(LinkButton) && ((LinkButton)c).Text == "Edit")
{
((LinkButton)c).Visible = false;
}
}
Your final alternative is within the rowediting event. You can check the cell value prior to doing anything. If the cell value is null, you can leave the gridview's EditIndex at -1 and then do a return; to exit out of the event.
ASKER
Bane83,
I went with your option 3. It partially worked, it halts the EDIT functionality if column 2 has data, however it also halts ALL EDITING for every record. Heres my code. Any thoughts on why?
Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls. GridViewEd itEventArg s) Handles GridView1.RowEditing
Dim revoke As String = GridView1.Rows(e.NewEditIn dex).Cells (2).Text
If revoke <> "" Then
' Cancel the edit operation.
e.Cancel = True
TextBox1.Text = "You cannot edit this record."
Else
TextBox1.Text = ""
End If
End Sub
I went with your option 3. It partially worked, it halts the EDIT functionality if column 2 has data, however it also halts ALL EDITING for every record. Heres my code. Any thoughts on why?
Protected Sub GridView1_RowEditing(ByVal
Dim revoke As String = GridView1.Rows(e.NewEditIn
If revoke <> "" Then
' Cancel the edit operation.
e.Cancel = True
TextBox1.Text = "You cannot edit this record."
Else
TextBox1.Text = ""
End If
End Sub
ASKER
I think I found the problem, when I debugged the code I found column 2 has "nbsp" within the record. The SQL Source table is all NULLS so I don't know how this "non breaking space" character gets in there. Any thoughts on this, if not.
Plan B: Column 1 has a checkbox, that I can use what is syntax to determine if checkbox is true or false using ROWEDITING above, I can't seem to capture the value of the checkbox for the IF statement.
thanks
Plan B: Column 1 has a checkbox, that I can use what is syntax to determine if checkbox is true or false using ROWEDITING above, I can't seem to capture the value of the checkbox for the IF statement.
thanks
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Perfect! the Direct cast for Gridview and chk.check did it.
One more question
how can I format the cell to RED COLOR when the checkbox is checked
OR format the second column next to checkbox RED if the cell is not null?
One more question
how can I format the cell to RED COLOR when the checkbox is checked
OR format the second column next to checkbox RED if the cell is not null?
[cell].Styles.Add("backgro und-color" , "Red")
Replace [cell] with the full code required to access the cell.
Replace [cell] with the full code required to access the cell.
You misht be able to hide the edit function. Assuming the edit button is in the last cell you could set Visible=False or change the CssClass to a class that sets display:none;
That way the user would not be able to click edit.