none
formview 如何讀取指定欄位值 改值後回傳呢? RRS feed

  • 問題

  • 各位大大好 我想要讀取Formview的值,之前使用的是gridview ,但由於gridview無法做轉向動作
    所以我改用formview
      <script runat="server">
    
      void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
      {
            
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            string pattern = @"(\D)";
            string input =e.Row.Cells[3].Text;
            string replacement = "";
            Regex rgx = new Regex(pattern);
            string result = rgx.Replace(input, replacement);
    
           // Console.WriteLine("Original String:    '{0}'", input);
          //  Console.WriteLine("Replacement String: '{0}'", result);                             
    
    
          e.Row.Cells[3].Text = result;
         
          Image img = e.Row.FindControl("img") as Image;
          
           img.ImageUrl = "http://api.findbook.tw/book/cover/" + e.Row.Cells[3].Text + ".jpg";
         
    
            LinkButton Button1 = e.Row.FindControl("Button1") as LinkButton;
            Button1.OnClientClick = "window.open('http://findbook.tw/book/" + e.Row.Cells[3].Text + "/basic'); event.returnValue=false;";
    
            e.Row.Cells[3].Visible = false;
        }
        
      }
    
    </script>

    我了解如何讀取gridview欄位值,但formview一直試不出來,請問大大我該如何下手去取值呢?  謝謝你的任何回覆唷



    2013年1月2日 下午 07:12

解答

所有回覆

  • 您可先參考MSDN範例

    FormView 類別

    試了有不了解的地方再提出來


    軟體開發領域裡區區一個迷途工程師
    MyBlog: http://www.dotblogs.com.tw/ian/
    開發ASP.NET您要瞭解的基楚

    2013年1月3日 上午 01:29
    版主
  • 你是希望取值 還是 改值?

    Formview中,比較簡單的方法就是在畫面設計時用Asp.Net Control 來放各種物件,例如Label或Textbox 

    (如果要用Div or p 之類,就要加上runat="server" 以及 ID 也可以做到一些操控,但這個要試試看)

    之後直接用Formview.FindControl....即可
    或是用((Formview)sender).FindControl.....即可

    2013年1月3日 上午 02:11
  • 如果是用 FormView 的話,取值時要注意原本用 Cell 的地方要改成 Row

    另外值應該都是在第2個 Cell (第1個是 Header)

    e.Row.Cells[3].Text 

    或許你的程式應該要改成下列的樣子?

    e.Row[3].Cells[1].Text 


    2013年1月3日 上午 03:39
  •  protected void ISBNTextBox_TextChanged(object sender, EventArgs e)
            {
    
                
                FormView1.FindControl("ISBNTextBox").ToString();
              
    
                    Image3.ImageUrl = "http://api.findbook.tw/book/cover/" + "FindControl" + ".jpg";
    
    
                
                }

    這是我寫的部份 但還是無法取欄位值放入照片的連結路徑中:(((

    2013年1月3日 上午 09:46
    1. 你直接綁到 TextChanged 事件? 那可以直接把 sender 轉型成 TextBox (但沒有很建議這樣的設計,光是 postback 就會讓使用者不舒服了吧)
    2. FindControl 之後要轉型成 TextBox...
    3. 還有 TextBox 是用 .Text 而非 .ToString()
    4. 另外這段是你目前的程式碼? 還是有調整過才放上來論壇的 pseudo code? 感覺問題還蠻多的
    2013年1月3日 上午 10:01
  • 這沒有調整過的,以下是我四個formview欄位,我需要取得ISBN放入imageurl的片段中抓圖片

    <ItemTemplate>
                                                ID:
                                                <asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>' />
                                                <br />
                                                BookName:
                                                <asp:Label ID="BookNameLabel" runat="server" Text='<%# Bind("BookName") %>' />
                                                <br />
                                                ISBN:
                                                <asp:Label ID="ISBNLabel" runat="server" Text='<%# Bind("ISBN") %>' />
                                                <br />
                                                <br />
                                                <asp:Image ID="Image3" runat="server" imageurl="http://api.findbook.tw/book/cover/" + <%# Bind("ISBN") %> + ".jpg"" />
                                                <br />
                                                
                                            </ItemTemplate>

    但試過許多方法 不太了解怎麼抓formview裡的isbn字串放入我的imageurl中:( 

    2013年1月3日 上午 10:13
  • 如果沒有需要在程式端調整 ImageUrl,直接用 binding 的方式就好,只是你的寫法錯了,請參考下列既有討論

    http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/2dc107fb-c105-4750-a6bb-22e33b1740ee

    2013年1月3日 上午 10:25
  •  protected void ISBNTextBox_TextChanged(object sender, EventArgs e)
            {
    
                
                FormView1.FindControl("ISBNTextBox").ToString();
              
    
                    Image3.ImageUrl = "http://api.findbook.tw/book/cover/" + "FindControl" + ".jpg";
    
    
                
                }

    這是我寫的部份 但還是無法取欄位值放入照片的連結路徑中:(((

    第一,FormView1.FindControl("ISBNTextBox") 是抓到TextBox的Control,並不是文字,
    所以你必須要做轉型,像是 ((Textbox)FormView1.FindControl("ISBNTextBox")) ,這樣的類型才會是Textbox

    第二,然後你必須要宣告一個物件來接他,像是
    Textbox _ISBNTextBox =  ((Textbox)FormView1.FindControl("ISBNTextBox")) ;
    之後才能使用_ISBNTextBox.Text呀.....

    此外,如同坎尼大說的,因為你是Textbox呼叫ISBNTextBox_TextChanged這個事件,
    這個事件後面第一個參數object sender,指的就是是誰呼叫這個事件的物件,
    所以可以直接這樣做轉型
    Textbox _ISBNTextBox=(Textbox)sender;

    這種的好處就是可以多的Textbox共同呼叫同一個TextBox_TextChanged事件時,可以找出來說,這次是哪個Textbox來呼叫的。

    第三,今天你的Image3也是同樣在FormView1中,所以你必須也要用同樣的方法來獲取Image3,像是
     Image _Image3 = ((Image)FormView1.FindControl("Image3")) ;
    此外,由於ISBNTextBox與Image3都是放在同一層的FormView1中,
    所以可以利用 Parent 的方法來獲取FormView1,再去FindControl
    例如   Image _Image3 = (Image)((TextBox)sender).Paren..FindControl("Image3");

    第四,"http://api.findbook.tw/book/cover/" + "FindControl" + ".jpg";
    這三個都是string呀!!!!
    你怎麼做還是只會是 http://api.findbook.tw/book/cover/FindControl.jpg 呀!!!!

    第五,你到底是要在 TextChanged 中做,還是在RowDataBound中做事情呀,
    這是兩個完全不同的情況觸發事件,TextChanged 是指使用者在Textbox中輸入文字後,觸發的事件,通常還會搭配AutoPostBack= true使用。
    RowDataBound則是在資料與FormView1繫結後引發的事情。

    上面所述是指在程式端做的事情,基本上還是要了解,因為有時候還是會需要用到。
    另一種就是如坎尼大說的,資料先整理好後,直接用binding處理,或是在binding時做串接也可以。

    請參考

    DataBound Event

    TextBox.TextChanged Event

     
    • 已編輯 Bruce_柏 2013年1月4日 上午 02:28
    2013年1月4日 上午 02:26