- PR -

ASP.NETでのListBoxの2列表示について

投稿者投稿内容
sirouto
ベテラン
会議室デビュー日: 2004/11/05
投稿数: 50
投稿日時: 2005-02-10 19:54
いつも大変参考にさせて頂いております。
ASP.NET(VB)で開発を行っております。そこでListBoxについてどうしても実現方法が分からない事があります。
お分かりになられる方が居ればどうかお教え願います。

○リストボックスを2列表示するにはどうすればよいのでしょうか?
↓このような使い方をしております。
方法
lstUser.DataSource = DataSet.Tables("ユーザマスタ").DefaultView
lstUser.DataValueField = "ユーザコード"
lstUser.DataTextField = "ユーザメイ"
lstUser.DataBind()

これだと「ユーザメイ」しかリストボックスに表示されません。
「ユーザメイ」と「ユーザメイカナ」を表示したいのです。


lstUser.DataSource = DataSet.Tables("ユーザマスタ").DefaultView
lstUser.DataValueField = "ユーザコード"
lstUser.DataBind()
lstUser.DataTextField = "ユーザメイ;ユーザーメイカナ"
としてもユーザメイしか表示されません。


↓のソースも試しました。
方法
With DataSet.Tables("ユーザーマスタ")
 For i = 0 To .Rows.Count - 1
  str = CStr(.Rows(i).Item("ユーザーメイ")) & " "
str = str & CStr(.Rows(i).Item("ユーザメイカナ"))

 lstUser.Items.Add(New ListItem(str,CStr(.Rows(i).Item("ユーザコード")))
 Next i
End With

としても、間の" "(空白)が画面表示時にはなくなっており、詰めて表示されていまします。

・の方法でもで空白がちゃんと表示される方法でもかまわないので、どなたかどうかご教授お願い致します。m(_ _)m

以上です。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-02-10 20:42
ListBoxを使う限り無理。HTMLの<SELECT>タグのリストボックスには、そもそも複数列を表示する機能なんてありませんから・・・。

DataGridなどほかのコントロールを使いましょう。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-10 21:18
 ユーザ名とコードを連結して列を作る、とかはダメ?


 間の空白が、なくなってはいないでしょう。1つだけになっている、ではないですか?

 それで、そういうことを言うあなたは、HTMLの勉強をしましょう。
&nbsp;
_________________
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-02-10 21:28
結構難しい問題です

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8981&forum=7&start=0

方法に対応したカスタムコントロールを自作するとか。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-02-10 22:42
引用:

結構難しい問題です

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8981&forum=7&start=0



一つの解決策。かなり強引な方法ですが、一応動きました。
サーバ側で書けないならクライアント側で書き換えてしまえという発想。
自分で見てもスマートな方法とは思えないんですが…(^^;

コード:
■■■aspx.vbのPage_Load■■■
Me.ListBox1.Items.Add(New ListItem("01&nbsp;&nbsp;value1", "01"))
Me.ListBox1.Items.Add(New ListItem("02&nbsp;&nbsp;value2", "02"))
Me.ListBox1.Items.Add(New ListItem("03&nbsp;&nbsp;value3", "03"))

■■■aspxのonloadでfunc()を呼ぶ■■■
<script language="javascript">
function func()
{
    slObj = document.getElementById("ListBox1");
    for(i = 0; i < slObj.length; i++) {
        opObj = slObj.options[i];
        s = opObj.innerHTML;
        while(s.indexOf("&amp;nbsp;") != -1) {
            s = s.replace("&amp;nbsp;","&nbsp;");
        }
        opObj.innerHTML = s;
    }
}
</script>

sirouto
ベテラン
会議室デビュー日: 2004/11/05
投稿数: 50
投稿日時: 2005-02-14 09:30
甕星 様
Jitta 様
todo 様
ぼのぼの 様

返答してた頂きありがとうございました。m(_ _)m

ほのぼの様、ご提示して頂いた方法で試してみます。ご親切に恐れ入ります。
ありがとうございます。



ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-02-14 13:27
>ほのぼの様、ご提示して頂いた方法で試してみます。

自分で提示しといてなんですが、単に見た目上揃えたいだけなら、全角スペースを使った方が楽ですよ?(^^;
あくまで、どうしても&nbsp;を使いたいならこんな方法もあります、ってことです。

ところで、todoさんの示された(私も上で引用しました)リンク先に、こんな記述がありますが…

引用:

表示上の要件で隙間を空けたいからといって、安直に「&nbsp;」を使うのも避けてください。それらはそういう用途のためにあるのではありません。

全角スペースに関しても避けた方がいいでしょう。(英語圏)開発者の配慮不足を起因として、たまたまそのよう(全角サイズの空白)に表示されてしまっているだけで、率直に言えばただの「バグ」です。


これって、正しいんでしょうか?私としては、&nbsp;ってまさにこうゆう用途のためにあるのだと思いますし、全角スペースもしっかりと文字コードが割り当てられた(Unicodeだと0x3000)、立派な文字だと思うんですけど…
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-14 21:34
 問題の本質とか、弊害とか、副作用とか、そういうことも考えています?JavaScriptでやると、クライアントがScriptをOFFにしていたら、実行されませんよ?

 テーブルに持ってくる時点で
SELECT ..., "ユーザメイ" || ' ' || "ユーザカナ" ...
# Oracleの場合
とか、DataTableに1つ余分に列を作っておいて、それのExpressionプロパティに
"[ユーザメイ] + ' ' + [ユーザカナ]"
とか、サーバ側で処理する方が安全かつ確実です。


ぼのぼのさん>
> 全角スペースもしっかりと文字コードが割り当てられた
 それは“空白”ですから、1個の0x20にならないとダメ、ってことでしょう。たぶん。改行コード、タブコード、空白コードが複数続く場合、1個の空白に置き換わるのが仕様です。
>> (英語圏)開発者の配慮不足を起因として、
>> たまたまそのよう(全角サイズの空白)に表示されてしまっているだけ

_________________

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