- PR -

DropDownListのアイテム追加について

投稿者投稿内容
萌衣
会議室デビュー日: 2006/06/19
投稿数: 17
投稿日時: 2006-07-10 10:58
こんにちわ
C#初心者です。

今、XMLファイルで作成した社員IDをDropDownList(ddsID)のアイテムとして
表示させるということをしています。

if(!IsPostBack)
{
  DataSet Syain = new DataSet( "社員" );
  DataTable syainTable = new DataTable( "社員テーブル" );
  Syain.ReadXml( @"C:\conf\社員.xml" );

  foreach( DataRow row in Syain.Tables[ "社員テーブル" ].Rows )
  {
    ddlID.Items.Add( row[ "社員ID" ].ToString() );
  }
}

上記のコードを作成して実行してみたところ
アイテムに社員IDは入るのですが、全ID追加あとに
さらにまたIDが入ってしまい、ループが2回まわってしまっています。

これを解決するために、何かヒントなどをいただけませんでしょうか?

よろしくお願いいたします。

[ メッセージ編集済み 編集者: 萌衣 編集日時 2006-07-10 10:59 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-07-10 11:30
Itemを追加している部分にブレークポイントを設定して、そこを何回通るのか、
それぞれ追加しているデータの内容はどうなっているか、等を調べてみてはどうでしょう。
萌衣
会議室デビュー日: 2006/06/19
投稿数: 17
投稿日時: 2006-07-10 11:47
>どっとねっとふぁんさん

返答ありがとうございます。

その方法で調べたのですが、一度一通りにループが回って
ループの外に出るのですが、そのあとすぐに
またループ処理を始めてしまっている状態で
どこのその原因があるのかが分かっていない状態です。
カルガモ
常連さん
会議室デビュー日: 2006/06/27
投稿数: 20
投稿日時: 2006-07-10 12:10
引用:

その方法で調べたのですが、一度一通りにループが回って
ループの外に出るのですが、そのあとすぐに
またループ処理を始めてしまっている状態で
どこのその原因があるのかが分かっていない状態です。



こんにちは。
これって単純にif(!IsPostBack)が2回呼び出されているということですよね。
この処理を行っているメソッドまたはイベントを確認すれば良いかと思います。
コンボボックスコントロールの場合、
・選択アイテムが変更された
・ドロップダウンリストが閉じられた
とか色々とイベントを拾うことが可能で、もしそのいくつかのイベントで処理をしていた場合、そのように複数回呼ばれます。(これは当然ですが、、)

どのトリガを元にどのような処理を行うのかハッキリ整理したら良いかも知れません。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-07-10 12:59
> これって単純にif(!IsPostBack)が2回呼び出されているということですよね。

ああ、そうか。
IsPostBackでチェックしてるということはPage_Loadの中に記述してるんじゃ
ないかと思います。
で、もともとVS2003で作成したアプリケーションをVS2005にアップグレード
すると、このような現象が起きた、と聞いたことがあります。

#この掲示板じゃなかったかな?

で、もしそういったような状況であれば、AutoEventWireup属性が正しく
設定されていない可能性があります。
細かくいうと、AutoEventWireup属性がtrueになっているにもかかわらず、
Page_Loadイベントを呼び出す処理も明示的に記述されている、という
状態になってしまっているのではないかと思います。

http://dotnetfan.org/forums/53/ShowPost.aspx

このあたりを参考にしてみてください。
萌衣
会議室デビュー日: 2006/06/19
投稿数: 17
投稿日時: 2006-07-10 14:26
>カルガモさん

 最初の表示では省略してしまいましたが
 if(!IsPostBack)とコードの間に、もう一つの処理を行っています。
 そちらもコントロール上の特定のDropDownListにアイテムを表示させるもの
 なのですが、そちらは正常に1度だけでループを抜けています。
 最初に表示したコードにのみループが2回回ってしまうということも
 あるのでしょうか?


>どっとねっとふぁんさん

 サイトの方、じっくりと見させていただきます。
 ありがとうございます。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-07-10 14:48
> 最初の表示では省略してしまいましたが
> if(!IsPostBack)とコードの間に、もう一つの処理を行っています。
> そちらもコントロール上の特定のDropDownListにアイテムを表示させるもの
> なのですが、そちらは正常に1度だけでループを抜けています。

これ、省略しないとどういうプログラムになるのでしょう。
たとえば同じDataSetを使いまわしてて、データが2重に登録されてる
可能性はないでしょうか?
カルガモ
常連さん
会議室デビュー日: 2006/06/27
投稿数: 20
投稿日時: 2006-07-10 14:48
引用:

 最初の表示では省略してしまいましたが
 if(!IsPostBack)とコードの間に、もう一つの処理を行っています。
 そちらもコントロール上の特定のDropDownListにアイテムを表示させるもの
 なのですが、そちらは正常に1度だけでループを抜けています。
 最初に表示したコードにのみループが2回回ってしまうということも
 あるのでしょうか?



if(!IsPostBack)内に初めに投稿された(既存)ソースと別の処理があるのでしょうか?
if(!IsPostBack)
{
// 既存ソース

// 別の処理(もしくは既存ソースの上)
}

またはあるメソッド内に
if(!IsPostBack)
{
// 既存ソース
}

if(!IsPostBack2)
{
// 別のソース
}
てな感じになっているのでしょうか?
どちらでしょうか?

スキルアップ/キャリアアップ(JOB@IT)