I have a table set up that has a unique Match_ID for each data entry. However, when I want to call a custom select query that gathers the team name from the Team table I get duplicate rows listing two Match_IDs that are the same. I want to display rows uniquely in a GridView with columns Home team, Away team, Home team score, Away team score and Game date. I don't want to display a Team's ID in their columns but instead their Team names. However I also want to make sure I can update this GridView, since using AS has prevented me from being able to do so in the past.
Here's what Im using so far with an image showing what the query returns. I am using an SQL datasource.
SELECT MatchStatistics.Match_ID, MatchStatistics.Home_team_ID, MatchStatistics.Away_team_ID, MatchStatistics.Home_team_score, MatchStatistics.Away_team_score, MatchStatistics.Game_date,
Team.Team_name
FROM MatchStatistics INNER JOIN
Team ON MatchStatistics.Home_team_ID = Team.Team_ID OR MatchStatistics.Away_team_ID = Team.Team_ID
WHERE EXISTS
(SELECT DISTINCT Match_ID
FROM MatchStatistics AS MatchStatistics_1)
<asp:GridView ID="EnterMatchGridView" runat="server" AutoGenerateColumns="False" DataKeyNames="Match_ID" DataSourceID="SqlDataSource4" OnRowUpdating="EnterMatchGridView_RowUpdating" OnRowDeleting="EnterMatchGridView_RowDeleting">
<Columns>
<asp:BoundField DataField="Match_ID" HeaderText="Match_ID" SortExpression="Match_ID" InsertVisible="False" ReadOnly="True" />
<asp:TemplateField HeaderText="Home Team" SortExpression="Home_Team_Name">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Home_Team_Name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Home_Team_Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Away Team" SortExpression="Away_Team_Name">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Away_Team_Name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Away_Team_Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Home Team Score" SortExpression="Home_team_score">
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("Home_team_score") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("Home_team_score") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Away Team Score" SortExpression="Away_team_score">
<EditItemTemplate>
<asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("Away_team_score") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("Away_team_score") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Date" SortExpression="Game_date">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Game_date", "{0:dd-MM-yyyy}") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("Game_date", "{0:dd-MM-yyyy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Edit/Delete">
<ItemTemplate>
<asp:LinkButton ID="BtnEdit" runat="server" CausesValidation="false" CommandName="Edit" Text="Edit" />
<span onclick="return confirm ('Are you Sure?')">
<asp:LinkButton ID="BtnDelete" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" />
</span>
</ItemTemplate>
<EditItemTemplate>
<asp:Button ID="BtnUpdate" runat="server" CausesValidation="true" CommandName="Update" ConflictDetection="OverwriteChanges" Text="Update" ValidationGroup="EnterMatchGridView" />
<asp:Button ID="BtnCancel" runat="server" CausesValidation="false" CommandName="Cancel" ConflictDetection="OverwriteChanges" Text="Cancel" />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
In short, how do I make this query return unique a uniqueMATCH_IDfor each row?
Wouldn't that be...
SELECT s.Match_ID
, s.Home_team_ID
, s.Away_team_ID
, s.Home_team_score
, s.Away_team_score
, s.Game_date
, h.Team_name home_team
, a.Team_name away_team
FROM MatchStatistics s
JOIN Team h
ON h.Team_ID = s.Home_team_ID
JOIN Team a
ON a.Team_ID = s.Away_team_ID
???
Related
When I click to edit the txtHours box, I get this error when I click the submit button:
Procedure or function UpdateWish has too many arguments specified.
I'm fairly new to all this so I've probably made a simple error somewhere. It's code which was written for me and I have changed it for a different application. Should all work if I can sort this error. I use ASP.NET, VB.Net and SQL Server. There is no code in the VB file which should affect this so I haven't included that. Any help appreciated.
FRONT END
<asp:TextBox ID="txtWishText" runat="server" style="padding-left:20px; padding-right:20px; text-align:center;" Columns="5" MaxLength="5" Font-Size="Large" Height="28px" AutoComplete="off"></asp:TextBox>
<br>
<asp:ImageButton ID="btnSubmitWish" runat="server" class="BackNextButton" style="margin-top:7px;" ImageUrl="~/files/images/icons/submitButton.gif" ValidationGroup="Wish" />
<br />
<asp:RequiredFieldValidator ID="rqdWish" runat="server"
ErrorMessage="Enter Hours Worked" ValidationGroup="Wish"
CssClass="error" ControlToValidate="txtWishText" Display="Dynamic"></asp:RequiredFieldValidator>
<br />
<h2 style="font-size:16px; color:#333333; font-family: 'Seymour One', sans-serif; text-align:center;">My Hours: <asp:Label ID="LabelTotalHours" runat="server" ></asp:Label></h2>
<asp:SqlDataSource ID="DSMyWishes" runat="server"
ConnectionString="<%$ ConnectionStrings:DBConnectionString %>"
DeleteCommand="RemoveWish" DeleteCommandType="StoredProcedure"
SelectCommand="SelectFullWishesByAccount"
SelectCommandType="StoredProcedure"
UpdateCommand="UpdateWish" UpdateCommandType="StoredProcedure">
<DeleteParameters>
<asp:Parameter Name="wishID" Type="Int32" />
</DeleteParameters>
<SelectParameters>
<asp:Parameter Name="name" DbType="String" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="wishID" Type="Int32" />
<asp:Parameter Name="dailyHours" Type="Decimal" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:GridView ID="gdvMyWishes" runat="server" CssClass="mGrid" DataSourceID="DSMyWishes" width="100%" AutoGenerateColumns="False" DataKeyNames="wishID">
<AlternatingRowStyle CssClass="alt" />
<Columns>
<asp:TemplateField HeaderText="Date" SortExpression="wishText">
<ItemTemplate>
<asp:Label ID="LabelDate" font-size="1.0em" runat="server" Text='<%# Bind("dateInserted") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Hours" SortExpression="wishText">
<EditItemTemplate>
<asp:TextBox ID="txtHours" runat="server" Columns="40" MaxLength="40" Text='<%# Bind("dailyHours") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" font-size="1.0em" runat="server" Text='<%# Bind("dailyHours") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ButtonType="Link"
DeleteImageUrl="~/files/images/icons/deleteIcon.png" EditImageUrl="~/files/Images/icons/editIcon.png" UpdateImageUrl="~/files/Images/icons/submitIcon.png" CancelImageUrl="~/files/Images/icons/backIcon.png"/>
</Columns>
<EmptyDataTemplate>
No hours recorded
</EmptyDataTemplate>
</asp:GridView>
SQL Server stored procedure:
ALTER PROCEDURE [UpdateWish]
#wishID int,
#dailyHours decimal(10,2)
AS
BEGIN
SET NOCOUNT ON;
UPDATE tblWishes
SET dailyHours = #dailyHours
WHERE wishID = #wishID
END
As per your code, it looks perfect for passing 2 update parameter and in stored procedure also there is 2 parameters.
Also for select and delete working fine with CommandType.StoredProcedure?
Otherwise, you should first try without stored procedure as per the following way.
Removing UpdateCommandType="StoredProcedure" and set update query in UpdateCommand
Code:
<asp:SqlDataSource ID="DSMyWishes" runat="server"
ConnectionString="<%$ ConnectionStrings:DBConnectionString %>"
DeleteCommand="RemoveWish" DeleteCommandType="StoredProcedure"
SelectCommand="SelectFullWishesByAccount"
SelectCommandType="StoredProcedure"
UpdateCommand="UPDATE tblWishes SET dailyHours = #dailyHours WHERE wishID = #wishID">
Hello i want gridview which should be like
|Sl No|Std No|Student Name|Total Amount|Paid Amount|Unpaid Amount|Action|
Here I am setting Sl No ,Unpaid Amount , and Action Columns by Template Field.And Other i am directly getting from mysql DB and binding to gridview. But the columns from DB are apending to end of those 3 TemplateFields.And i cant use BoundFields for those 4 Fields from DB.
MY CODE IS LIKE THIS
<div class="GridviewDiv">
<asp:GridView runat="server" ID="gvDetails" AllowPaging="false" AutoGenerateColumns="true" Width="100%" OnRowDataBound="GridView1_RowDataBound1">
<HeaderStyle CssClass="headerstyle" />
<Columns>
<asp:TemplateField HeaderText="SlNo">
<ItemTemplate>
<%#Container.DataItemIndex+1 %>
<asp:Label ID="serialID" runat="server" Visible="false"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<%-- HERE I WANT THOSE COLUMNS FROM DATABASE--%>
<asp:TemplateField HeaderText="Unpaid Amount">
<ItemTemplate>
<asp:Label ID="UnpaidText" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Take Fee">
<ItemTemplate>
<asp:Button ID="TakeFeeCash" runat="server" BackColor="#2C6AA0" BorderColor="#2C6AA0" align="right"
BorderStyle="Ridge" Font-Bold="True" ForeColor="White" OnClick="FeeCashButton_click"
Text="Take Fee" CommandName="Select" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
What i am getting is like this
IMAGE:
How to set my columns like above format?
Please Help.
I am trying to add a DropDownList into the DataGrid so the location column can be easily changed. I am getting an error with TemplateField, itemtemplate, label and DropDownList. I get the build error:
is not allowed within a
'System.Web.UI.WebControls.DataGridColumnCollection'.
<asp:DataGrid runat="server" CssClass="tblResults" OnItemDataBound="dgList_ItemCreated" AllowSorting="true" OnSortCommand="dgTrailer_Sort" ID="dgTrailers" DataKeyField="ID" AutoGenerateColumns="false">
<Columns>
<asp:BoundColumn DataField="TrailerOwner" HeaderText="Owner" SortExpression="TrailerOwner"></asp:BoundColumn>
<asp:BoundColumn DataField="TrailerMake" HeaderText="Trailer Make" SortExpression="TrailerMake"></asp:BoundColumn>
<asp:TemplateField HeaderText="Trailer Location">
<itemtemplate>
<asp:Label ID="lblLocation" runat="server" Text='<%# Eval("Location") %>' Visible = "false" />
<asp:DropDownList ID="ddlLocation" runat="server">
</asp:DropDownList>
</itemtemplate>
</asp:TemplateField>
<asp:BoundColumn DataField="Year" HeaderText="Year" SortExpression="Year"></asp:BoundColumn>
</Columns>
</asp:DataGrid>
TemplateField, itemtemplate, label and DropDownList all have green lines under them and which means its not a known element.
You should use TemplateColumn, when it comes to DataGrid as it is inherited from System.Web.UI.WebControls.DataGridColumn.
TemplateField is inherited from System.Web.UI.WebControls.DataControlField, which make sense with GridView.
I have a list view to show products with prices. I put an updatePanel in ItemTemplate.
When I Click the button in contentTemplate, the Eval fields do not update, By definition the
update panel do a partial post back but it does not reflect database changes.
<ContentTemplate>
<asp:ImageButton ID="productPic" runat="server" Height="270" Width="202" ImageUrl='<%# Eval("ImageUrl") %>' />
<asp:Table ID="ColorTable" runat="server" EnableViewState="true"></asp:Table>
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:Literal ID="LitProductId" runat="server" Text='<%# Eval("ProductId") %>' EnableViewState="true"></asp:Literal>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Name") %>' Font-Size="8"
Font-Bold="False" Font-Names="tahoma" />
<br />
<asp:Label ID="Label3" runat="server" Text='<%# Eval("Price","{0:0,0}") %>' Font-Size="8" Font-Bold="False" Font-Names="tahoma"
Font-Strikeout='<%# Eval("DiscountedPrice")!=DBNull.Value %>' />
<br />
<asp:Label ID="Label4" runat="server" Text='<%# Eval("DiscountedPrice","{0:0,0}") %>' Font-Size="10" Font-Bold="True" Font-Names="tahoma" ForeColor="Red"
Visible='<%# Eval("DiscountedPrice")!=DBNull.Value %>' />
<br />
</ContentTemplate>
</asp:UpdatePanel>
<br />
</td>
I appreciate any help.
It's because you are dynamically adding them in. When you post back, it loses that state and if you aren't adding them back in at that point (i.e. saving them to viewstate and adding them back in on load), it no longer knows they exist.
I found the solution.
If you want to use update panel inside a listview, you should bind the data source in code - page load.
ListView1.DataSource = new ProductFacade().GetCat3ProductListSpec(cat3Id);
ListView1.DataBind();
When you use sqlDataSource attribute, the update panel does not function as you expect.
i want to remove this column from gridview i try to add values in dropdownlist in grdiview but when i add it works fine but this column in black color appears...
how i remove it..
grdiview html
<asp:BoundField DataField="DocType" HeaderText="Document" />
<asp:BoundField DataField="DepType" HeaderText="Department" />
<asp:BoundField HeaderText="ApproveID" DataField="ApproveID"
></asp:BoundField>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblCountry" runat="server" Text='<%#
Eval("ApproveID") %>' Visible = "false" />
<asp:DropDownList ID="DropDownList4" runat="server"
class="vpb_dropdown">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
First make sure AutoGenerateColumns="false" is set on your GridView, and then delete the lines
<asp:BoundField HeaderText="ApproveID" DataField="ApproveID"></asp:BoundField>
from your HTML. When you turn off AutoGenerateColumns, you will need to add each column manually.