Display GridView column value in Bootstrap modal popup with textbox on Button click in Edit mode using VB.Net
In Edit mode when I click on that button to get value in Model View but getting this error.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. Source Error:
Line 76: Dim rowIndex As Integer = Convert.ToInt32(TryCast(TryCast(sender, LinkButton).NamingContainer, GridViewRow).RowIndex)
Line 77: Dim row As GridViewRow = GridView1.Rows(rowIndex)
Line 78: txtdet_text.Text = TryCast(row.FindControl("lbldet_text"), Label).Text
Line 79: ClientScript.RegisterStartupScript(Page.GetType(), "Pop", "openModal();", True)
Line 80: End Sub
|
<div class="col-sm-12">
<div class="table-responsive" style="margin-top: 5px;">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound"
DataKeyNames="item_id" OnRowEditing="OnRowEditing" OnRowCancelingEdit="OnRowCancelingEdit" PageSize="10" AllowPaging="true" OnPageIndexChanging="OnPaging"
OnRowUpdating="OnRowUpdating" OnRowDeleting="OnRowDeleting" EmptyDataText="No records has been added."
CssClass="table table-bordered table-striped" Style="white-space: nowrap; font-size: 12px; letter-spacing: 0.50px">
<Columns>
<asp:TemplateField HeaderText="Text" HeaderStyle-HorizontalAlign="Left">
<ItemTemplate>
<asp:Label ID="lbldet_text" runat="server" Text='<%# Eval("det_text") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtdet_text" runat="server" CssClass="form-control" Text='<%# Eval("det_text") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Text View ">
<ItemTemplate>
<asp:LinkButton ID="lnkBtnEdit" runat="server" Text="Update Text" CssClass="btn btn-primary btn-xs" OnClick="Display"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ButtonType="Link" HeaderStyle-HorizontalAlign="Left" HeaderText="Actions" ShowEditButton="true" ShowDeleteButton="true">
<ControlStyle CssClass="btn btn-primary btn-xs" />
</asp:CommandField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Enter Item Detail Text : </h4>
</div>
<div class="modal-body">
<asp:TextBox ID="txtdet_text" runat="server" CssClass="form-control" Height="250px" TextMode="MultiLine" />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" data-dismiss="modal">Save & Exit</button>
</div>
</div>
</div>
</div>
Code Behind
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
Me.BindGrid()
End If
End Sub
Private Sub BindGrid()
Dim conString As String = ConfigurationManager.ConnectionStrings("conString").ConnectionString
Dim query As String = "SELECT * FROM tblsample"
Using con As SqlConnection = New SqlConnection(conString)
Using sda As SqlDataAdapter = New SqlDataAdapter(query, con)
Using dt As DataTable = New DataTable()
sda.Fill(dt)
GridView1.DataSource = dt
GridView1.DataBind()
End Using
End Using
End Using
End Sub
Protected Sub OnRowEditing(sender As Object, e As GridViewEditEventArgs)
GridView1.EditIndex = e.NewEditIndex
Me.BindGrid()
End Sub
Protected Sub Display(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
Dim rowIndex As Integer = Convert.ToInt32(TryCast(TryCast(sender, LinkButton).NamingContainer, GridViewRow).RowIndex)
Dim row As GridViewRow = GridView1.Rows(e.RowIndex)
Dim det_text As String = (TryCast(row.FindControl("txtdet_text"), TextBox)).Text
txtdet_text.Text = det_text
ClientScript.RegisterStartupScript(Me.[GetType](), "Pop", "openModal();", True)
End Sub
Protected Sub OnRowCancelingEdit(sender As Object, e As EventArgs)
GridView1.EditIndex = -1
Me.BindGrid()
End Sub
Protected Sub OnRowDeleting(ByVal sender As Object, ByVal e As GridViewDeleteEventArgs)
Dim item_id As Integer = Convert.ToInt32(GridView1.DataKeys(e.RowIndex).Values(0))
Dim query As String = "DELETE FROM tblsample WHERE item_id=@item_id"
Dim conString As String = ConfigurationManager.ConnectionStrings("conString").ConnectionString
Using con As SqlConnection = New SqlConnection(conString)
Using cmd As SqlCommand = New SqlCommand(query)
cmd.Parameters.AddWithValue("@item_id", item_id)
cmd.Connection = con
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
Me.BindGrid()
End Sub
Protected Sub OnRowDataBound(sender As Object, e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow AndAlso e.Row.RowIndex <> GridView1.EditIndex Then
TryCast(e.Row.Cells(13).Controls(2), LinkButton).Attributes("onclick") = "return confirm('Do you want to delete this row?');"
End If
End Sub
Protected Sub OnPaging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
GridView1.PageIndex = e.NewPageIndex
Me.BindGrid()
End Sub