2015-04-27 22 views
0
public partial class UserProfile : System.Web.UI.Page 
{ 
    private static int _userId = 0 ; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string FoB; 

     if (Session["user"] != null) 
     { 
      _userId = DataManager.GetUserId(Session["user"].ToString()); 
     } 
     string connection = WebConfigurationManager.ConnectionStrings["Database"].ConnectionString; 
     SqlConnection conn = new SqlConnection(connection); 
     SqlCommand comm = new SqlCommand("SELECT * from dbo.Rating where UserID=_userId", conn); 
     SqlDataReader reader; 
     conn.Open(); 
     reader = comm.ExecuteReader(); 
     reader.Read(); 
      FoB = reader["GenreID"].ToString(); 
     if(FoB=="1") 
     { 
      FB.Text = reader["RatingValue"].ToString(); 
     }; 

      } 
      while (reader.HasRows); 

      reader.Close(); 
      conn.Close(); 
    } 
} 

我有一個名爲rating的表。它有4列比較後在同一表格和列中顯示不同的值

RatingId, UserID, GenreID,Rating value 

我想顯示基於當前用戶登錄的評分值和對不同流派的不同評分值。 UserIDGenreID是來自表GenreUser的外鍵。

編輯(評論)

CREATE TABLE [dbo].[Rating] ( 
    [RatingID] INT IDENTITY (1, 1) NOT NULL, 
    [UserID] INT NULL, [GenreID] INT NOT NULL, 
    [RatingValue] INT NOT NULL, 
    PRIMARY KEY CLUSTERED ([RatingID] ASC), 
    CONSTRAINT [FK_Rating_Genre] FOREIGN KEY ([GenreID]) 
    REFERENCES [dbo].[Genre] ([GenreID]) 
    ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT [FK_Rating_User] FOREIGN KEY ([UserID]) 
    REFERENCES [dbo].[User] ([UserID]) 
    ON DELETE CASCADE ON UPDATE CASCADE); 

我想1個單當前用戶顯示的8個不同的流派8個不同的等級值。

回答

0

如果我理解正確的話,你要映射的標籤不同列的基礎上,另一種歧視柱:

using (var conn = new SqlConnection(connection)) 
using (var comm = new SqlCommand("SELECT * from dbo.Rating where [email protected]", conn)) 
{ 
    comm.Parameters.AddWithValue("@userId", _userId); 
    conn.Open(); 
    using (var reader = comm.ExecuteReader()) 
    { 
     if (reader.HasRows && reader.Read()) 
     { 
      FB.Text = reader["GenreID"].ToString() == "1" 
       ? reader["RatingValue"].ToString(); 
       : reader["SomeOtherColumn"].ToString(); 
     } 
    } 
} 

如果一個或多個映射列駐留在另一非表Rating,您需要加入該表格 - 我們需要查看您的表格結構以幫助您。

編輯,重新顯示8個流派

我假設用戶和類型的表都有一個列Name - 加入到這些表來查找評級。 GROUP and MAX將消除同一用戶在同一流派中具有多個評級的任何情況(如果需要,則切換MAXAVGMIN)。前八名將限制流派。因此,像這樣調整Sql:

SELECT TOP 8 u.Name AS UserName, g.Name as GenreName, MAX(r.RatingValue) AS TopRating 
FROM dbo.Rating r 
    INNER JOIN dbo.[User] u 
    ON r.UserId = u.UserID 
    INNER JOIN dbo.[Genre] g 
    ON r.GenreID = g.GenreID 
WHERE [email protected] 
GROUP BY u.Name, g.Name 
ORDER BY g.Name; 

現在,對於用戶界面,您將無法在單個標籤中顯示錶。最簡單的將僅僅是給讀者的結果直接綁定到一個新的GridView控制您的WebForm

using (var reader = comm.ExecuteReader()) 
    { 
     if (reader.HasRows) 
     { 
      gridView.DataSource = reader; 
      gridView.DataBind();    
     } 
    } 

這將顯示一個表3列匹配所選列,和最多8行。

+0

CREATE TABLE [DBO] [評價]( [RatingID] INT IDENTITY(1,1)NOT NULL, [用戶名] INT NULL, [GenreID] INT NOT NULL, [RatingValue] INT NOT NULL, PRIMARY KEY CLUSTERED([RatingID] ASC), CONSTRAINT [FK_Rating_Genre] FOREIGN KEY([GenreID])REFERENCES [dbo]。[Genre]([GenreID])DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT [FK_Rating_User] FOREIGN KEY ([UserID])REFERENCES [dbo]。[User]([UserID])ON DELETE CASCADE ON UPDATE CASCADE ); 我想通過1位當前用戶顯示8種不同流派的8種不同評級值 –

+0

我已將您的評論貼到您的問題中並更新了我的答案。我假設Sql Server爲數據庫 - 請根據需要在您的問題中添加Sql-Server或MySql或Oracle標記。 – StuartLC

+0

解決了用戶價值的問題。 現在您可以請指導如何根據流派ID顯示評級值? –