2011-08-02 24 views
0

私は、データベースの情報をテーブルに塗りつぶし、ドロップダウンリストの値を選択してデータベースを更新するasp.netアプリケーションを作成しました。何らかの理由で今すぐ次の日に行って、すべての情報が正しく表示されますが、ドロップダウンリストの値は表示されません。このため、最初のページに3行、2番目のページに10が表示されているとします。2ページ目の最初の3行は、前のページと同じ値をドロップダウンリストに表示します。ここですべての行のドロップダウンリストを作成するために使用されるコードは次のとおりドロップダウンリストが消去されない

tc = new TableCell(); 
        tc.BorderWidth = 1; 
        String rteNum = reader.GetValue(fCount - 1).ToString().TrimStart('R'); 

        //this output displays the correct value 
        System.Diagnostics.Trace.WriteLine(rteNum.Trim()); 

        ddl = new DropDownList(); 
        ddl.ID = "route" + index; 
        ddl.Attributes["runat"] = "server"; 
        ddl.Attributes["onblur"] = "refresh()"; 

        ListItem item; 
        for (int i = 1; i <= 32; i++) 
        { 
         item = new ListItem(); 
         item.Text = i.ToString(); 
         item.Value = i.ToString(); 
         if (i.ToString().Equals(rteNum.Trim())) 
         { 
          item.Selected = true; 
         } 
         ddl.Items.Add(item); 

        } 
        list.Add(ddl); 

        tc.Controls.Add(ddl);    
        tc.ID = "tblr" + index; 
        tr.Cells.Add(tc); 

        tbl1.Rows.Add(tr); 

EDIT:

問題は、データがしかしときに私は、ユーザーがボタンを押すと変更された値を使用する必要があります変更された情報を削除する必要があります。だから、基本的に私は情報をドロップダウンリストで表示し、データベースを更新する必要があります。

+0

ライン "ddl.Attributes [" にrunat "] = "サーバ";"その属性をクライアントに送信するだけで何もしません。手でコントロールを作成するときに、runatを追加する必要はありません。 –

答えて

0

一つの方法は、次のようにマークアップでそれを行うことです。

<asp:DropDownList ID="ddl_1" runat="server" AutoPostBack="True" 
    DataSourceID="ds_1" DataTextField="myText" 
    DataValueField="myValue" /> 

    <asp:SqlDataSource ID="ds_1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:myConnection %>" 
     <!--this is if you use a stored procedure--> 
     SelectCommand="dbo.myProcedure" SelectCommandType="StoredProcedure"> 
     <!--this is if you use direct sql (less secure -- be careful with parameters)--> 
     SelectCommand="SELECT field1 as myValue, field2 as myText FROM myTable"> 
    </asp:SqlDataSource> 

だから、あなたがすることに応答して(データベースの値に基づいて選択された値を設定したい場合、ボタンクリックなど、あなたは上記のサブを使用することができ、マークアップでdatasoruceコントロールを使用する代わりに

Private Sub SELECT_whatever() 
     Dim myCommand As New SqlCommand("dbo.SELECT_whatever", myConnection) 
     With myCommand 
      .CommandType = CommandType.StoredProcedure 
      With .Parameters 
       .Clear() 
       .AddWithValue("myParameter", me.txtwhateverfield.text) 
      End With 
     End With 
     Try 
      myConnection.Open() 
      myReader = myCommand.ExecuteReader 
      While myReader.Read 
       If Not IsDBNull(myReader("field1")) Then 
        Me.ddl_instructor.SelectedValue = myReader("field1") 
       End If 
       Me.lbl_RecordID.Text = "Record ID: " & myReader("recordID") 
       -- etc. -- for all of the textboxes, labels, etc. on your page 
      End While 
     Catch ex As Exception 
      Response.Write(ex.Message) 
     Finally 
      myConnection.Close() 
     End Try 

、代わりに...

    :あなたはあなたのコードビハインドでこのようなサブを使用する場合があります
  1. データを作成するには、
  2. コール.databind(データテーブルにドロップダウンリストのデータソースを設定し、データセット内のテーブルのためのデータアダプタの.fill
  3. データアダプタを作成
  4. コールを設定します)をドロップダウンリストに追加します。

ここでは例です:http://support.microsoft.com/kb/306574(CTRL + F "データバインド" の - それは項目4にダウン)

0

あなたのDropDownListのアイテムが選択されていると思われます。 rteNum.Trim()はこれをデバッグするには32

を通じて1として正確な値を持っていない、ページがあなたの価値を見つけるために、レンダリングした後、あなたのソースを見るrteNum

//pre-trim this val. 
string rteNum = reader.GetValue(fCount - 1).ToString().TrimStart('R').Trim(); 
... 

ddl.Attributes["name"] = rteNum; //a random place/attr show the value of rteNum 
ddl.Attributes["runat"] = "server"; 
ddl.Attributes["onblur"] = "refresh()"; 
.... 
item.Value = i.ToString(); 
item.Selected = (i.ToString()==rteNum); 

の値を決定しようとすると思われますDropDownListの名前属性です。それを1-32と比較してください。あなたのドロップダウンリストを同期することも、その後

0

は批判までもありませんが、ちょうど観測...

のようにして投入するために多くの作業をやっている、と。あなたは中間の人間としてデータウェアを使う必要はありません。あなたはデータソースに直接行くことができます。 databind()を呼び出すと、データ・レイアウト・エディタから行ごとに挿入するのではなく、リストにデータを挿入できます。

このアプローチに興味があれば、サンプルコードをいくつか載せることができます。

それ以外の場合、@ p.cambellによれば、現在行っているように、選択したプロパティはrteNumに値が設定されている場合にのみ設定されます。

+0

rteNumには常に値があります。私はあなたが私のためにそれを置くことができるならdatabind()の例を見たいと思う。 – user776530

+0

OK - できます.. – Chains

関連する問題