• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 436
  • Last Modified:

Gridview - select

I have a column (buttons "Select") I want to click on a button and disply more info about a customer on a second page from a different table. I have set DatakeyNames on  Gridview  properties to CustomerID. What else do I need to do?
0
VBdotnet2005
Asked:
VBdotnet2005
1 Solution
 
peterdunganCommented:
open the second page with post parameters of the foreign key from the selected record
0
 
VBdotnet2005Author Commented:
I'm not so sure how to do that. Could you help?
0
 
jnhorstCommented:
Your data grid should have an ItemCommand event that fires when you click the button.  The event handler will have an argument (the variable is "e") from which you will be able to get info about the ID.  You should have the CustomerID as a non-visible field in your grid (maybe make it the very first column).  In the ItemCommand event, do this:

// this assumes the customer id is the first column, but can be made not visible.
string custID = e.Item.Cells[0].Text;

// redirect the browser to the other page.
string url = String.Concat("OtherPage.aspx?CustID=", custID);
Response.Redirect(url);

This will cause the other page to show with the customer id in the querystring (the part of the url after the question mark).

Then in OtherPage.aspx, you can code the Page_Load event to get this value like this:

// get the id...
int custID = Convert.ToInt32(Request.QueryString["CustID"]);

Then use this to query your database for that customer's info and show on the page.

John
0
Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

 
VBdotnet2005Author Commented:
I'm using VB. The equavalent of ItemCommand in GridView is RowCommand. However, I don't see "item" here.
   
Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand

        Dim custID As String = e.item.Cells(0).Text             ----------------------------------------error item
        Dim url As String = [String].Concat("OtherPage.aspx?CustID=", custID)
        Response.Redirect(url)

    End Sub
0
 
NightmanCTOCommented:
Try this (derived from the documentation at http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand.aspx)

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
  Dim index As Integer = Convert.ToInt32(e.CommandArgument)
  Dim row As GridViewRow = CustomersGridView.Rows(index)
  Dim custID As String = row.Cells(0).Text
  Dim url As String = [String].Concat("OtherPage.aspx?CustID=", custID)
  Response.Redirect(url)
End Sub
0
 
VBdotnet2005Author Commented:

OtherPage.aspx

I get this error - Input string was not in a correct format.


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


        Dim custID As Integer = Convert.ToInt32(Request.QueryString("CustID"))   ------->>>>Input string was not in a correct format.

        If Not IsPostBack Then
            Try

                Dim Constr As String = " mystring"
                Dim con As New SqlConnection(Constr)
                Dim Comstr As String = "select *from residence where id = CustID"
                Dim da As New SqlDataAdapter(Comstr, con)
                Dim ds As New DataSet

                da.Fill(ds, "table1")



                Me.GridView1.DataSource = ds
                Me.GridView1.DataMember = "table1"
                Me.GridView1.DataBind()



            Catch ex As Exception

                Response.Write(ex.ToString)


            End Try


        End If


    End Sub

0
 
NightmanCTOCommented:
What is customerID? Text?
0
 
VBdotnet2005Author Commented:
It is number.
0
 
VBdotnet2005Author Commented:
System.InvalidCastException: Conversion from string "" to type 'Integer' is not valid. ---> System.FormatException: Input string was not in a correct format. at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat) at Microsoft.VisualBasic.
0
 
NightmanCTOCommented:
No, it's an empty string. Conversion from string "" to Integer is not valid. The value is not being passed to that page.
0
 
VBdotnet2005Author Commented:
I set a property "DatakeyNames"  to CustomerID         ------this is on  Gridview1
0
 
VBdotnet2005Author Commented:
How can I correct it then?
0
 
NightmanCTOCommented:
The code that I helped you with takes the text  value of the Cell(0) of the grid and passes it through. What is this value?
0
 
VBdotnet2005Author Commented:
It is empty  -  ""
0
 
NightmanCTOCommented:
If that is the correct value that you are trying to pass through, and it's empty, look into why.
Is the data correct?
Is this a null value coming back from the database?
Should you be trying to pass a different cell (e.g. cell(1) or cell(2))?
Is there another property that you should be passing (e.g. DatakeyNames)?
0
 
VBdotnet2005Author Commented:
I changed this
Dim ID As String = row.Cells(0).Text

to

Dim ID As String = row.Cells(1).Text

On Otherpage.aspx - I get the same table from my first page
It does display the record the selected on the address bar  - http://localhost/Sample/OtherPage.aspx?ID=6

Why I won't display just the record I select on Gridview?

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


        Dim custID As Integer = Convert.ToInt32(Request.QueryString("CustID"))  
        If Not IsPostBack Then
            Try

                Dim Constr As String = " mystring"
                Dim con As New SqlConnection(Constr)
                Dim Comstr As String = "select *from residence where id = CustID"
                Dim da As New SqlDataAdapter(Comstr, con)
                Dim ds As New DataSet

                da.Fill(ds, "table1")



                Me.GridView1.DataSource = ds
                Me.GridView1.DataMember = "table1"
                Me.GridView1.DataBind()



            Catch ex As Exception

                Response.Write(ex.ToString)


            End Try


        End If


    End Sub

0
 
VBdotnet2005Author Commented:
correction   - Dim Comstr As String = "select *from residence where id = ID"
0
 
VBdotnet2005Author Commented:

I corrected this line -   Dim Comstr As String = "select *from residence where id = ID"

to

  Dim Comstr As String = "select *from residence where id =" & ID

I finally works...wow

Goodnight, Nightman - Thank you so much for the help
0
 
NightmanCTOCommented:
Hehe, good morning you mean (9.30 am here in sunny South Africa).

Cheers
Night
0
 
NightmanCTOCommented:
Don't forget to PAQ this question. Also, don't forget to delete the pointer question (http://www.experts-exchange.com/Programming/Programming_Languages/Dot_Net/ASP_DOT_NET/Q_22033181.html) - I deliberately didn't post anything there so that you can delete it quickly and get the 50 points refunded.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now