Search code examples
c#asp.netgridviewlabelsqldatasource

Label displays the total number of rows in datasource shown in gridview


I have reached a still point in trying to figure out this issue. So my web application has a dropdownlist that populates a gridview. Then in a label below the gridview, it is supposed to show all of the rows in the database for the selected author (this web app will use paging). My label is throwing some crazy values whenever I select other authors. What is it that I need to adjust in my code?

CSS code:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Homemade01.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Welcome to our Master/Detail Filtering with a DropDownList example</title>
<style type="text/css">
    .auto-style1 {
        font-size: xx-large;
    }
    .auto-style2 {
        color: #FF0000;
    }
</style>
</head>
<body>
<form id="form1" runat="server">
<div>

    <span class="auto-style1">Welcome to our Master/Detail Filtering with a DropDownList example:</span><br />
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT firstName + '  ' + lastName AS FullName, lastName, authorID, firstName FROM Authors ORDER BY lastName, authorID"></asp:SqlDataSource>

    <br />
    Please select an author from the list:&nbsp;
    <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" Height="16px" Width="248px" AutoPostBack="True" DataTextField="FullName" DataValueField="authorID">
    </asp:DropDownList>
    <br />
    <br />
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT Authors.firstName, Authors.lastName, AuthorISBN.ISBN, Titles.title, Publishers.publisherName, Titles.price, Titles.editionNumber FROM (((Authors INNER JOIN AuthorISBN ON Authors.authorID = AuthorISBN.authorID) INNER JOIN Titles ON AuthorISBN.ISBN = Titles.ISBN) INNER JOIN Publishers ON Titles.publisherID = Publishers.publisherID) WHERE (Authors.authorID = ?)">
        <SelectParameters>
            <asp:ControlParameter ControlID="DropDownList1" Name="?" PropertyName="SelectedValue" />
        </SelectParameters>
    </asp:SqlDataSource>
    <br />
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource2" AllowPaging="True" AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None" >
        <AlternatingRowStyle BackColor="White" />
        <Columns>
            <asp:BoundField DataField="firstName" HeaderText="First Name" SortExpression="firstName" />
            <asp:BoundField DataField="lastName" HeaderText="Last Name" SortExpression="lastName" />
            <asp:BoundField DataField="ISBN" HeaderText="ISBN" SortExpression="ISBN" />
            <asp:BoundField DataField="title" HeaderText="Title" SortExpression="title" />
            <asp:BoundField DataField="publisherName" HeaderText="Publisher" SortExpression="publisherName" />
            <asp:BoundField DataField="price" HeaderText="Price" SortExpression="price" DataFormatString="{0:c}" >
            <ItemStyle HorizontalAlign="Right" />
            </asp:BoundField>
            <asp:BoundField DataField="editionNumber" HeaderText="Edition" SortExpression="editionNumber" >
            <ItemStyle HorizontalAlign="Right" />
            </asp:BoundField>
        </Columns>
        <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
        <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
        <SortedAscendingCellStyle BackColor="#FDF5AC" />
        <SortedAscendingHeaderStyle BackColor="#4D0000" />
        <SortedDescendingCellStyle BackColor="#FCF6C0" />
        <SortedDescendingHeaderStyle BackColor="#820000" />
    </asp:GridView>

    <br />
    <br />
    <span class="auto-style2">The number of books is:</span>
    <asp:Label ID="Label1" runat="server" style="color: #FF0000"></asp:Label>

</div>
</form>

C# code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

namespace Homemade01
{
public partial class WebForm1 : System.Web.UI.Page
{


    protected void Page_Load(object sender, EventArgs e)
    {
        int rowCount = GridView1.Rows.Count;
        Label1.Text = "Books found: " + rowCount.ToString();
    }

}
}

Solution

  • I finally got this corrected and running correctly. I might have double coded in one aspect for SQL DATA Source 1. I am using Visual Studio 2012, so if anyone references this post in the future remember to check the event handler in the properties for your SQL DataSources and just double click on selected.

    This is what caused a bunch of problems for me because although the datasource being selected was in my c# code, it wasn't referenced in the CSS code. Good luck to anyone else that has this issue in the future. This properly returned the results. The webpage is supposed to show the total number of records found for the author selected in the drop down list no matter what page you are on.

    Here is the CSS:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" 
    Inherits="Homemade01.WebForm1" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title>Welcome to our Master/Detail Filtering with a DropDownList example</title>
    <style type="text/css">
        .auto-style1 {
            font-size: xx-large;
        }
    </style>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>
    <span class="auto-style1">Welcome to our Master/Detail Filtering with a DropDownList example:</span><br />
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT firstName + '  ' + lastName AS FullName, lastName, authorID, firstName FROM Authors ORDER BY lastName, authorID" OnSelected="SqlDataSource1_Selected"  ></asp:SqlDataSource>
    
        <br />
        Please select an author from the list:&nbsp;
        <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" Height="16px" Width="248px" AutoPostBack="True" DataTextField="FullName" DataValueField="authorID">
        </asp:DropDownList>
        <br />
        <br />
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT Authors.firstName, Authors.lastName, AuthorISBN.ISBN, Titles.title, Publishers.publisherName, Titles.price, Titles.editionNumber FROM (((Authors INNER JOIN AuthorISBN ON Authors.authorID = AuthorISBN.authorID) INNER JOIN Titles ON AuthorISBN.ISBN = Titles.ISBN) INNER JOIN Publishers ON Titles.publisherID = Publishers.publisherID) WHERE (Authors.authorID = ?)" OnSelected="SqlDataSource2_Selected">
            <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList1" Name="?" PropertyName="SelectedValue" />
            </SelectParameters>
        </asp:SqlDataSource>
        <br />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource2" AllowPaging="True" AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None"  >
            <AlternatingRowStyle BackColor="White" />
            <Columns>
                <asp:BoundField DataField="firstName" HeaderText="First Name" SortExpression="firstName" />
                <asp:BoundField DataField="lastName" HeaderText="Last Name" SortExpression="lastName" />
                <asp:BoundField DataField="ISBN" HeaderText="ISBN" SortExpression="ISBN" />
                <asp:BoundField DataField="title" HeaderText="Title" SortExpression="title" />
                <asp:BoundField DataField="publisherName" HeaderText="Publisher" SortExpression="publisherName" />
                <asp:BoundField DataField="price" HeaderText="Price" SortExpression="price" DataFormatString="{0:c}" >
                <ItemStyle HorizontalAlign="Right" />
                </asp:BoundField>
                <asp:BoundField DataField="editionNumber" HeaderText="Edition" SortExpression="editionNumber" >
                <ItemStyle HorizontalAlign="Right" />
                </asp:BoundField>
            </Columns>
            <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
            <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
            <SortedAscendingCellStyle BackColor="#FDF5AC" />
            <SortedAscendingHeaderStyle BackColor="#4D0000" />
            <SortedDescendingCellStyle BackColor="#FCF6C0" />
            <SortedDescendingHeaderStyle BackColor="#820000" />
        </asp:GridView>
    
        <br />
        <br />
        <asp:Label ID="Label1" runat="server" style="color: #FF0000"></asp:Label>
    
    </div>
    </form>
    

    And now the C# code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;
    using System.Data;
    
    namespace Homemade01
    {
    public partial class WebForm1 : System.Web.UI.Page
    {
        //int rowCount;
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
        {
            //int rowCount = e.AffectedRows;
        }
    
        protected void SqlDataSource2_Selected(object sender, SqlDataSourceStatusEventArgs e)
        {
            int rowCount = e.AffectedRows; 
            //Above find the affected rows in SQL Data Source 2 and counts them then assigns them to an INT
            Label1.Text = "The number of Books found is: " + rowCount.ToString();
            //Label prints its text plus the rowCount variable which is converted to a string
        }
    
        }
       }