user576785
user576785

Reputation: 19

how do i display the "On Offer" indicator when the product is on offer in the database of asp.net?

I need to display the "on Offer" indicator next to the product in the gridview if the product has a number "1" in the "Offered" column in the database. if it is zero, then don't display. is there some way to achieve that? thanks.

In my product listing page: Dim objCat As New Category Dim objProduct As New Product Dim i As Integer Dim boolError As Boolean = False

objCat.ID = CType(Request.QueryString("CatID"), Integer)

' get details of the category
objCat.GetDetails()

' Display the category name
lblCatName.Text = objCat.Name
lblCatName2.Text = objCat.Name

' Display the category description
lblCatDesc.Text = objCat.Description

 objCat.GetOfferedProducts()     

For i = 0 To gvProduct.Rows.Count - 1        
' Get the ProductId from the first cell        
 objProduct.ID = gvProduct.Rows(i).Cells(0).Text   

 Dim lblOffer As Label    
 lblOffer = CType(gvProduct.Rows(i).FindControl("lblOffer"), Label)   

   If objCat.Offered = "1" Then            
   lblOffer.Visible = True        
   Else            
  lblOffer.Visible = False         
   End If    

Next
gvProduct.DataSource = objCat.GetProducts()
gvProduct.DataBind()

in my category class: Public Sub GetOfferedProducts()

' Define a conection to database    
' Read connection string from the web.config file.  
  Dim strConn As String    
 strConn = ConfigurationManager.ConnectionStrings("AppDb").ToString   
 Dim conn As New SqlConnection(strConn)   

' Retrieve details of a given Category ID from the database    
  Dim strSql As String     
 strSql = "SELECT * FROM CatProduct cp INNER JOIN Product p " & _     
           "ON cp.ProductID=p.ProductID INNER JOIN Category c ON                       cp.CategoryID=c.CategoryID " & _         
     "WHERE cp.CategoryID=@CategoryID"   

' Define an Command object to execute the SQL statement
Dim cmd As New SqlCommand(strSql, conn)
' Add parameter to the SQL command

cmd.Parameters.AddWithValue("@CategoryID", ID)

' Define a data adapter to fetch data
Dim da As New SqlDataAdapter(cmd)

' Define a data set to hold the data fetched
Dim ds As New DataSet

' Open database connection
conn.Open()

da.Fill(ds, "CatProduct")
' Close the database connection

conn.Close()

If ds.Tables("CatProduct").Rows.Count <> 0 Then
Name = ds.Tables("CatProduct").Rows(0)("CatName")
Description = ds.Tables("CatProduct").Rows(0)("CatDesc") ImageFile = ds.Tables("CatProduct").Rows(0)("CatImage")
Offered = CType(ds.Tables("CatProduct").Rows(0)("Offered"), Integer) End If

Upvotes: -1

Views: 159

Answers (2)

Cognitronic
Cognitronic

Reputation: 1436

I would hook up the gridview's OnRowDataBound in your aspx page:

<asp:gridview id="MyGridView"  
    autogeneratecolumns="true"
    allowpaging="true"
    onrowdatabound="MyGridView_RowDataBound" 
    runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label runat="server" id="lblOffer"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>

  </asp:gridview>

Then in the code behind you could do something like this:

 void MyGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
  {
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
      var lbl = e.Row.FindControl("lblOffer");
      If objCat.Offered = "1" Then            
          lbl.Visible = True        
      Else            
          lbl.Visible = False         
      End If    
    }
  }

Hope that helps!!

Upvotes: 1

David
David

Reputation: 218827

There are various ways to make this happen. Basically, you're just looking to conditionally show/hide an element in the grid.

Which of the many ways to do this happens to be the best way entirely depends on how you're retrieving, binding to and displaying your data. You can put the logic in the business layer (a certain property is set or null based on business rules, etc.), in your data binding code (if you're looping through records for the display or something, such as in an ItemDataBound handler), in your display code (if you're just declaring everything in the aspx and just need to toss in an Eval and a conditional), etc.

Upvotes: 0

Related Questions