画面の一部は次のようになります。
ユーザーはドロップダウン リストから選択肢を選択し、追加ボタンをクリックできます。追加ボタンのコードは次のとおりです。
protected void btnModuleAdd_Click(object sender, EventArgs e)
{
var selectedModule = ddlModsList.SelectedItem.ToString();
var graphicName = this.GraphicName;
var xr = new GraphicModuleXRef();
xr.GraphicName = graphicName;
xr.Module = selectedModule;
// Take drop down list selection and add it to GraphicModuleXRef table.
var context = new XRefDataContext();
context.GraphicModuleXRefs.InsertOnSubmit(xr);
context.SubmitChanges();
}
基本的には、ユーザーの選択をテーブルに書き出します。この部分は正常に動作します。
Page_Load で、IsPostback かどうかを確認し、そうであれば、次のコードを実行します。
private void LoadOtherModulesUsed()
{
if (this.GraphicName != null)
{
lbModules.Items.Clear();
var context = new XRefDataContext();
var q = context.GraphicModuleXRefs
.Where(a => a.GraphicName.Contains(this.GraphicName));
foreach (GraphicModuleXRef gr in q)
{
lbModules.Items.Add(new ListItem(gr.Module.ToString()));
}
}
}
このコードは、テーブルから読み取り、条件に一致するすべてのレコードを検索して、リスト ボックスに追加します。
したがって、私が期待しているのは、ページがリロードされ、テーブルに追加されたばかりの新しいエントリを含むリストボックスが再作成されることです。しかし、それは起こっていません。リロードしたように画面が更新されますが、エントリはリストボックスに表示されません。しかし、それはそこにありますが、見えないだけです。ユーザーが [追加] ボタンをクリックして別のエントリを追加すると、リストが 1 行「ロールアップ」され、前のエントリが表示されます。しかし、新しいものではありません。ユーザーが画面を終了して再入力すると、リストボックス内のすべてのエントリが表示されます。リストボックスが短すぎてすべてのレコードを表示できないようですが、さまざまな高さを試してみましたが、違いはありませんでした。
誰かが私を正しい方向に向けることができるかどうか疑問に思っていますか?
簡単に言えば、新しいアイテムをリストボックスに追加しても、別のアイテムが追加されない限りすぐには表示されないため、リストが「ロールアップ」されます。スクロールバーでリストをスクロールしても、別のエントリが追加されるまで新しいエントリは表示されません。また、リストを上にスクロールすると、前のエントリが表示されます。とても奇妙!
編集:これをより簡単に説明しようとしています:
- ユーザーは、[追加] ボタンを押してリストボックスにアイテムを追加します。
- リストボックスに新しい項目が表示されません。
- ユーザーは、[追加] ボタンを押して、リストボックスに別の項目を追加します。
- ユーザーがリストボックスを上にスクロールすると、前のアイテムがリストボックスに表示されるようになりました。
- ただし、追加したばかりの最新のアイテムは、手順 3 を繰り返さない限り表示されません。
- また、ページを終了してから戻ると、リスト内のすべての項目が読み込まれ、すべてが表示されます。