2014-02-18 165 views
1

林這個代碼做顯示圖像編輯值:比較數據集使用

protected void Repeater_Outer_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    RepeaterItem item = e.Item; 

    if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) 
    { 
     Repeater Inner = (Repeater)item.FindControl("image_Repeater"); 
     HiddenField Inner_Id = (HiddenField)item.FindControl("HiddenField_Id"); 

     MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["dbcnx"].ToString()); 
     MySqlCommand cmdNew = new MySqlCommand(); 

     cmdNew.Connection = conn; 
     cmdNew.Parameters.AddWithValue("@id", Inner_Id.Value); 
     cmdNew.CommandText = "SELECT * FROM images WHERE FK_album = @id"; 

     conn.Open(); 
     Inner.DataSource = cmdNew.ExecuteReader(); 
     Inner.DataBind(); 

     Label Label_Amount = (Label)item.FindControl("Label_Amount"); 
     Label_Amount.Text = Convert.ToString(Inner.Items.Count); 
     conn.Close(); 
    } 
} 

我的問題是,每一個轉發器運行它連接到這使得網頁需要很長加載數據庫(如10倍秒) 所以我想填充一個數據集或一個通用List到數據綁定。我已經試過這樣:

protected static List<string> dataSetImages(){ 
     MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["dbcnx"].ToString()); 
     string sql = "select * from images"; 
     MySqlCommand cmd = new MySqlCommand(sql, conn); 
     conn.Open(); 
     MySqlDataAdapter sqlDataAdapter = new MySqlDataAdapter(cmd); 
     DataSet dataSet = new DataSet(); 
     sqlDataAdapter.Fill(dataSet); 
     conn.Close(); 
     List<string> imageList = new List<string>(); 
     for (int i = 0; i <= dataSet.Tables[0].Rows.Count - 1; i++) 
     { 
       string id = dataSet.Tables[0].Rows[i].ItemArray[0].ToString(); 
       string img_name = dataSet.Tables[0].Rows[i].ItemArray[1].ToString(); 
       string img_alt = dataSet.Tables[0].Rows[i].ItemArray[2].ToString(); 
       string FK_album = dataSet.Tables[0].Rows[i].ItemArray[3].ToString(); 
      imageList.Add(id); 
      imageList.Add(img_name); 
      imageList.Add(img_alt); 
      imageList.Add(FK_album); 
     } 
     return imageList; 
} 

如何我可以用這個和比較FK_album到Inner_Id.Value?

回答

0

如果您堅持使用RowFilter approach,那麼這就是您要找的。

string expression = String.Format("FK_album = {0}", Inner_Id.Value); 
DataRow[] filteredRows = imageList.Tables[0].Select(expression); 

這是關於DataView RowFilter Syntax的文章。

+0

非常感謝你這個詳細的答案,它的作品就像一個魅力。你最好的:D – Mindfull

0

更好,如果你能類像下面

public class ImageDto 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string Alt { get; set; } 
    public string FK_album { get; set; } 

} 

然後

protected static List<ImageDto> dataSetImages(){ 
    List<ImageDto> imageList = new List<ImageDto>(); 
    // add items 
    return imageList; 

} 

,那麼你可以撥打上面的方法,並得到ImageDto

List<ImageDto> images = dataSetImages(); 

列表中你Repeater_Outer_ItemDataBound方法你可以做如下

Inner.DataSource = images.Where(i=>i.FK_album == Inner_Id.Value).ToList(); 
+0

謝謝您的回覆。即時嘗試做這樣的事情:imageList.Tables [0] .Select(「FK_album like inner_id.value」),但我不知道如何去做,我還沒有想出如何得到它的工作。 – Mindfull

+0

非常感謝您的幫助。你的回答是對的,但我必須把它交給德里克他的詳細答案。也感謝你讓我意識到我需要學習一些面向對象的文章:) – Mindfull