C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>
■4691  XmlSerializerについて
□投稿者/ まいるど -(2006/07/03(Mon) 20:22:26)

    分類:[C#] 


    分類:[C#] 

    こんばんは、質問させてください。

    自分で作ったクラスをXMLSerializerをつかって読み込みまたは保存しようとすると、

    'System.IO.FileNotFoundException' の初回例外が mscorlib.dll で発生しました。
    'System.IO.FileNotFoundException' の初回例外が mscorlib.dll で発生しました。シンボルは読み込まれませんでした。

    と表示されます。
    コードは以下のとおりです。

    自分が望むように、XMLファイルに保存も呼び出しもできています。
    しかし上記の例外が発生し、
    また[デバック][例外]を全てチェックを入れると、
    XmlSerializer xm = new XmlSerializer(typeof(myC));
    のところで例外が発生します。がcatchにいきません。

    このエラーの回避のしかた。
    または無視してよいのかご教授よろしくお願いいたします。

    //------------------------------------------------------------------------
    public partial class myC
    {
    public double A ;
    public string B ;
    public myC(){}
    }
    [Serializable]
    //------------------------------------------------------------------------
    public partial class myC_X
    {
    public void SaveXML(string fn ,myC st )
    {
    using (FileStream fs = new FileStream(fn, FileMode.Create))
    {
    XmlSerializer xm = new XmlSerializer(typeof(myC));
    try
    {
    xm.Serialize(fs, st);
    }
    catch (Exception){}
    finally
    {
    fs.Close();
    fs.Dispose();
    }
    }
    }
    public void LoadXML(string fn ,myC st )
    {
    略 //Deserialize(fs);をつかっている
    }
    }
    //------------------------------------------------------------------------

記事No.4691 のレス /0過去ログ4より / 関連記事表示
削除チェック/

■4691  XmlSerializerについて
□投稿者/ まいるど -(2006/07/03(Mon) 20:22:26)

    分類:[C#] 


    分類:[C#] 

    こんばんは、質問させてください。

    自分で作ったクラスをXMLSerializerをつかって読み込みまたは保存しようとすると、

    'System.IO.FileNotFoundException' の初回例外が mscorlib.dll で発生しました。
    'System.IO.FileNotFoundException' の初回例外が mscorlib.dll で発生しました。シンボルは読み込まれませんでした。

    と表示されます。
    コードは以下のとおりです。

    自分が望むように、XMLファイルに保存も呼び出しもできています。
    しかし上記の例外が発生し、
    また[デバック][例外]を全てチェックを入れると、
    XmlSerializer xm = new XmlSerializer(typeof(myC));
    のところで例外が発生します。がcatchにいきません。

    このエラーの回避のしかた。
    または無視してよいのかご教授よろしくお願いいたします。

    //------------------------------------------------------------------------
    public partial class myC
    {
    public double A ;
    public string B ;
    public myC(){}
    }
    [Serializable]
    //------------------------------------------------------------------------
    public partial class myC_X
    {
    public void SaveXML(string fn ,myC st )
    {
    using (FileStream fs = new FileStream(fn, FileMode.Create))
    {
    XmlSerializer xm = new XmlSerializer(typeof(myC));
    try
    {
    xm.Serialize(fs, st);
    }
    catch (Exception){}
    finally
    {
    fs.Close();
    fs.Dispose();
    }
    }
    }
    public void LoadXML(string fn ,myC st )
    {
    略 //Deserialize(fs);をつかっている
    }
    }
    //------------------------------------------------------------------------

親記事 /0過去ログ4より / 関連記事表示
削除チェック/

■4437  クリスタルレポートのページ区切り情報取得方法
□投稿者/ t16 -(2006/06/21(Wed) 11:26:41)

    分類:[VB.NET] 


    分類:[VB.NET] 

    初めて投稿します、t16です。

    WindowsXPSP2
    VS2003(VB)
    Crystal Reports for Visual Studio .NET AAP5G-JS00000-U7000B4

    クリスタルレポートで、詳細セクションに配置した項目のデータ数が、1ペー
    ジ出力できる個数以上になると、改ページされます。このとき、各ページの先
    頭のデータ、または最終のデータを取得するにはどのようにしたらよいでしょ
    うか?


    <rptファイルイメージ>

    -------------------+---------+
    (ページヘッダー) | メ モ | ←ラベル
    ------------------+----------+
    (詳細)      | メ モ | ←DBフィールド (複数行に出力)
    ------------------+----------+


    上記のような場合です。
    DB「メモ」フィールドは改行されてたりするので、「複数行に出力」にチェッ
    クを入れてあります。そのため、1ページ当りの出力行数は固定できません。

    OnFirstRecordでは、各ページの先頭行は取得できません。
    一つ前(又は後)のレコードのPageNumberと、現在の行のPageNumberを比較で
    きればと思うのですが、やり方がわかりません。

    どなたかわかる方がいらっしゃいましたら、教えて下さい。
    よろしくお願いします。

親記事 /0過去ログ4より / 関連記事表示
削除チェック/

■4333  Re[3]: ボタンの周りの線を消せない
□投稿者/ じゃんぬ @ 管理人 -(2006/06/15(Thu) 19:37:15)
>

    分類:[VB.NET] 

    No4331に返信(ゆうじさんの記事)
    > Buttonクラスを継承し、ChangeUICuesイベントを
    > オーバーライドするというところまではわかったのですが、(勘違い??)

    えーっと、触ろうとしているもの自体が違います。
    ShowFocusCues プロパティをオーバーライドします。

    # リンク先でもそういう流れだったハズです。

    | 引用:------------------------------------------------------
    |
    |   ATSUSHIさんの書き込み (2005-11-16 01:25) より:
    |
    |   ShowFocusCuesプロパティは取得しかできないようですし
    |
    | -----------------------------------------------------------
    |
    | 取得できれば十分だと思いますよ。
    | 常に false を返すようにオーバーライドすれば良いでしょう。

    > 「 常にfalseを返すようにオーバーライド」というのがわかりません。

    プロパティの Getter で常に false を返すだけです。
記事No.4298 のレス /0過去ログ4より / 関連記事表示
削除チェック/

■4064  テーブルを3次元で表示するには?
□投稿者/ asp.net初心者 -(2006/05/30(Tue) 15:18:03)

    分類:[C#] 


    分類:[C#] 

    はじめまして。
    asp.net/VB.netを始めて1ヶ月くらいのものです。

    初歩的な質問かと思いますが、どうぞよろしくお願いします。

    asp.net/VB.netでプログラムしています。

    次のようなDataTable(dt1)があったとして、

    (dt1)
    日付 | 種類 | 内容1| 内容2
    ----------------------
    1/1 | A | 1 | 1’
    1/2 | B | 2 | 2’
    1/2 | A | 3 | 3’
    1/3 | C | 4 | 4’
    1/4 | A | 5 | 5’
    1/4 | C | 6 | 6’


    日付と種類で分類して、内容を一覧表示させたいと考えています。

    | A | B | C |
    1/1 | 1 1’| | |
    1/2 | 3 3' | 2 2' | |
    1/3 | | | 4 4’|
    1/4 | 5 5’| | 6 6’|

    横軸と縦軸は決まった数のため、動的に変動させる必要はありません。
    ただし、各セルの該当レコード数は、可変です。

    実現の方法として、
    横軸が「種類」、縦軸が「日付」のテーブルを作成し、
    各セルにDataGridを配置し、dt1のDataViewで必要な行を表示する、
    といったことしか思いつきませんでした。

    この場合、実際は、縦が7横が8あるため、56個のDataGridが必要になります。
    DataGridを56個も置くというのは、非現実的でしょうか?
    あるいは、何らかの問題があるのでしょうか?

    それとも、普通ではない方法をしようとしていますでしょうか?
    どなたか、ご教示お願いいたします。

親記事 /0過去ログ4より / 関連記事表示
削除チェック/

■4038  C#クラス:メソッドについて
□投稿者/ まいるど -(2006/05/29(Mon) 22:22:17)

    分類:[C#] 


    分類:[C#] 

    はじめまして。
    Visual Studio 2005 ,C#を今日はじめました。
    他社のC++は5,6年やっておりました。

    ひとつ質問させてください。
    C#では、クラスのメソッドを下記のC++のようにclass定義の外でやる方法はあるのでしょうか?
    //-----------------------
    class A
    {
    private void meso () ;
    } ;
    //-----------------------
    void A::meso()
    {
    //なんかコード
    }
    //-----------------------

親記事 /0過去ログ4より / 関連記事表示
削除チェック/

■3675  xmlDataDocumentとDataSetの同期について
□投稿者/ bou -(2006/05/18(Thu) 14:13:20)

    分類:[VB.NET] 


    分類:[VB.NET] 

    はじめまして。

    フォームの入力項目からDataSetを作成する際、構造が入れ子になっている為、
    xmlDataDocumentを使用し、
    Dim ds as DataSet = new DataSet("COMMON")
    Dim xmlDoc as xmlDataDocument = new xmlDataDocument(ds)
    として、XMLファイルを作成する事に関してはうまくいきました。
    XMLファイルは、おおざっぱですが、以下のような感じです。
    -------------------------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <COMMON>
     <CD>000000001</CD>
     <NAME>○○○○</NAME>
     <FAMILY no="01">
      <Name>太郎</Name>
      <Kana>タロウ</Kana>
      <Sex>男</Sex>
      <BirthDay>20060518</BirthDay>
     </FAMILY>
     <FAMILY no="02">
      <Name>花子</Name>
      <Kana>ハナコ</Kana>
      <Sex>女</Sex>
      <BirthDay>20050518</BirthDay>
     </FAMILY>
    </COMMON>
    -------------------------------------------------

    また、そのXMLファイルからReadXMLを使用して、DataSetに格納することもうまくいきました。

    しかし、本当の目的は、
    DataSetをXMLファイルに出力する事ではなく、
    .NETリモーティングを使用し、DataSet型のデータとしてそのままパラメータとして渡すことにあります。

    DataSet型の変数dsと、xmlDataDocument型の変数xmlDocは同期が取れていると思ったのですが、dsに対して、
    Dim dt as DataTable = new ds.Tables("COMMON")
    とやっても、dtはNothingとなってしまい、
    DataSetが取得できずにいます。

    どのようにすれば、DataSet型の変数として上記の内容を取得することが出来るのでしょうか。
    xmlDoc.DataSetを使用して取得することとか出来ませんでしょうか?
    xmlDoc.DataSet.DataSetNameだと、"COMMON"は取得できたのですが・・・

    どうかご教授いただけませんでしょうか。
    よろしくお願いいたします。
親記事 /0過去ログ4より / 関連記事表示
削除チェック/

■3914  Re[5]: デシリアライズの方法について
□投稿者/ あらら -(2006/05/25(Thu) 15:53:57)

    分類:[C#] 

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

    教えて頂いたように下記のように記述すれば警告はでなくなりました。
    -------------
    BinaryFormatter formatter = new BinaryFormatter();
    StructTEST sTest;
    sTest.str1 = "";
    sTest.str2 = "";
    sTets = (StructTEST)formatter.Deserialize(netStream);
    -------------

    ですが、上記の5行目で例外が発生します。(受信時にループでまわしているので、数回例外が発生します。)
    <発生した例外>
    「アセンブリ'Sample_Client,Version=1.0.0.0, Culture=neutral, PublicKeyToken = null"が見つかりません。」
    「入力ストリームは有効なバイナリ形式ではありません開始コンテンツ(バイト)06-03・・・・・・mscorlib」
    「バイナリストリーム'0'に、有効なBinaryHeaderが含まれていません。シリアル化と逆シリアル化の途中で、無効なストリームまたはオブジェクトのバージョン変更が発生した可能性があります。」

    たびたびで申し訳ないのですが、さらに質問させてください。
    ・シリアライズしたバージョン?とデシリアライズするときのバージョン?を同じにするにはどうしたらよいのでしょうか?


    >この StructTEST、「同じもの=同じ DLL で定義されたもの」じゃないですね? どこか別々のところで定義していますね?
    同じPCで作成したものなので、DLLも同じだと思っておりました。。。StructTEST自体は別々のプロジェクトで宣言しています。

    アドバイス等いただければ幸いです。
記事No.3885 のレス /0過去ログ4より / 関連記事表示
削除チェック/

■3885  デシリアライズの方法について
□投稿者/ あらら -(2006/05/25(Thu) 09:23:14)

    分類:[C#] 


    分類:[C#] 

    いつもお世話になっております。

    TCP/IP通信で、Client側で、BinaryFormatterを使用しシリアライズした構造体のデータを
    Server側で受信したいと思っております。
    下記のように記述した場合
    「フィールド'Sample_Server.Form1.StructTEST.str1'は割り当てられません。常に既定値
    nullを使用します。」
    の警告がコンパイル時に表示されるのですが、どのように記述すれば、値を割り当てること
    ができるのでしょうか?
    (先日、送信でこちらの掲示板で質問させていただいたのですが、今度は受信側です。。。)

    ご教授を頂ければ幸いです。

    --------------------
    /* Server側のプロジェクト */
    // データ受信箇所抜粋
    private Socket mySock;
    private NetworkStream netStream;

    netStream = new NetworkStream(mySock);
    BinaryFormatter formatter = new BinaryFormatter();
    StructTEST sTest = new StructTEST();
    sTest = (StructTEST)formatter.Deserialize(netStream);

    // 構造体
    [Serializable]
    struct StructTEST
    {
    public string str1;
    public string str2;
    }

    --------------------
    また、Clietn側は問題なく動いているように見えますが、下記のようにしてデータを渡しています。
    /* Client側のプロジェクト */
    // データ送信箇所抜粋
    private NetworkStream netStream

    StructTEST sTest = new StructTEST();
    sTest.str1 = "123";
    sTest.str2 = "456";
    BinaryFormatter formatter = new BinaryFormatter()
    formatter.Serialize(netStream, sTest);

    // 構造体
    [Serializable]
    struct StructTEST
    {
    public string str1;
    public string str2;
    }

親記事 /0過去ログ4より / 関連記事表示
削除チェック/

■3841  BinaryFormatterの使い方について
□投稿者/ あらら -(2006/05/24(Wed) 10:46:52)

    分類:[C#] 


    分類:[C#] 

    お世話になっております。

    BinaryFormatterの使用方法がいまいちわからないので、投稿させて頂きました。

    TCP/IPで通信をしており、構造体をBinaryFormatterでシリアライズしようとして
    いるのですが、コンパイルエラーが発生してしまいます。。
    (エラー内容から"AssembleyInfo.cs"を見てみたのですが、どこをどのように変更
    すればよいのかもわからないです。。。)

    アドバイス等頂ければ幸いです。

    下記のように記述しています。
    (.NET2005、WindowsXP)
    ----------------
    private TcpClient tcpC = new TcpClient();
    private NetworkStream netStream;
    private string IP = "";
    private Int32 port;

    // 接続ボタン
    private void btn_connect_Click(object sender, EventArgs e)
    {
    port = Int32.Parse(tbox_port.Text.Trim());
    IP = tbox_ip.Text.Trim();

    tcpC.Connect(IP, port);
    netStream = tcpC.GetStream();
    }

    // 構造体
    struct StructTEST
    {
    public string str1;
    public string str2;
    }

    // BinaryFomatterで送信テスト
    private void button1_Click(object sender, EventArgs e)
    {
    StructTEST sTest = new StructTEST();
    sTest.str1 = "123";
    sTest.str2 = "456";

    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(netStream, sTest);
    /*
    ↑で、アセンブリ'Sample_Client, Version=1.0.0.0, Culture=neutral,
     publicKey Token=null'の型'Sample_Client.Form1+StructTEST'はシリアル
      化可能として設定されていません。
    */
    }

親記事 /0過去ログ4より / 関連記事表示
削除チェック/

■6048  Re[3]: (VB2005)配列のインデックス指定方法
□投稿者/ 魔界の仮面弁士 -(2006/08/26(Sat) 20:09:51)

    分類:[VB.NET] 

    コンパイルしたアプリ、あるいは *.vshost.exe の方は、
    リリース/デバッグで何か大きな違いはありそうですか?


    > 再現した僕の環境は:
    プロダクトID が異なるとはいえ、環境自体は同じですね。
    が、やはり当方では再現しませんでした。

    強いてあげるならば、当方では KB912019 の hoffix を適用しているのですが、
    もしかして、これが関係してくるのかな?
    (hotfix を適用していない環境が手元に無いので、比較はできませんが…)

    ----------------
    Microsoft Visual Studio 2005
    Version 8.0.50727.42 (RTM.050727-4200)
    Microsoft .NET Framework
    Version 2.0.50727
    インストールされている Edition: Enterprise
    (中略)
    Microsoft Visual Studio 2005 Tools for the Microsoft Office System 日本語 用の Hotfix (KB912019)
    この Hotfix は Microsoft Visual Studio 2005 Tools for the Microsoft Office System 日本語 用です。\n
    後で最新版の Service Pack をインストールした場合、この Hotfix は自動的にアンインストールされます。\n
    詳細については、http://support.microsoft.com/kb/912019 を参照してください。
    ----------------

記事No.6037 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5841  ファイル操作のエラー処理などはこんなんでどうでしょう
□投稿者/ iwaiwa -(2006/08/23(Wed) 01:39:10)

    分類:[C#] 


    分類:[C#] 

    中@管理人
    タイトルが意味がわかりませんでしたので変更しました。
    ================================
    こんにちは。

    ファイル保存に関するプログラムを書いていて気になったことがあります。
    以下のような書き方をしていたとして、何か問題があるとすれば、
    どんな点ですか?エラー処理の観点などから、ご指摘頂ければと思っています。

    非常に曖昧な質問で恐縮ですが、ご指摘ください。
    よろしくお願い致します。

    ---------------------------

    private void SaveFile(string fileName, RichTextBox richTextBox, ToolStripStatusLabel statusLabel)
    {
    SaveFileDialog saveFileDialog = new SaveFileDialog();

    saveFileDialog.Filter = "テキストファイル (*.txt)|*.txt|"
    + "Word 文書 (*.doc)|*.doc|"
    + "リッチ テキスト形式 (*.rtf)|*.rtf";

    // デフォルトファイル名
    saveFileDialog.FileName = fileName;

    // ダイアログを開く
    DialogResult result = saveFileDialog.ShowDialog();

    if (result == DialogResult.OK)
    {
    StreamWriter writer = new StreamWriter(saveFileDialog.FileName, false, Encoding.GetEncoding("Shift_JIS"));

    try
    {
    statusLabel.Text = "ファイルを保存しています...";

    if (saveFileDialog.FilterIndex > 1)
    {
    // リッチテキスト
    writer.Write(richTextBox.Rtf);
    }
    else
    {
    // テキスト形式
    writer.Write(richTextBox.Text);
    }
    }
    catch (Exception ex)
    {
    // エラーメッセージを表示
    MessageBox.Show(ex.Message,
    "エラー",
    MessageBoxButtons.OK,
    MessageBoxIcon.Error);
    }
    finally
    {
    writer.Close();
    statusLabel.Text = String.Empty;
    }
    }
    }

親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■5869  ストアドを用いたデータ取得について
□投稿者/ Saitou -(2006/08/23(Wed) 11:40:33)

    分類:[C#] 


    分類:[C#] 

    はじめまして。
    C#初心者で、社内に詳しい人がいなくて困っています。
    どなたか、アドバイスお願いいたします。

    WEBアプリで入力値をストアドに渡して、
    戻り値をOracleRefCursorで取得後、テキストに書き込み、ダウンロードするシステムです。

    「cmd.ExecuteNonQuery();」の後が、実行されません。
    デバッグを実行したところ、引数のセットもされていました。
    戻り値の定義もされていました。
    Oracleのエラーはcatch文で捕まえるようになっていますが、通過しました。

    -----------抜粋---------------------------------
    string CmdTxt = "";
    OracleCommand cmd = new OracleCommand(CmdTxt,con);

    CmdTxt = "「パッケージ名」.「プロシージャ名」";

    cmd.CommandText = CmdTxt;
    cmd.CommandType = CommandType.StoredProcedure;

    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
    (中略)
    ストアドに渡す引数のセットと、戻り値の定義
    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

    cmd.ExecuteNonQuery();

    OracleRefCursor cur1 = (OracleRefCursor)cmd.Parameters[10].Value;

    OracleDataReader rdr1 ;

    rdr1 = cur1.GetDataReader();

親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■5157  動的バインドDropDownListの値設定
□投稿者/ Glen -(2006/07/28(Fri) 11:46:37)

    分類:[VB.NET] 


    分類:[VB.NET] 

    はじめてこちらにたどりついたものです。

    いろいろ調べてもどうしても解決できず書き込みさせていただきます。

    VB.NET(Framework2.0)で開発しています。IDEはVWD2005Expressです。

    DetailsViewがEditモードになった時に
    DetailsView上に二つのDropDownListを配置しています。

    一つ目のDropDownListは静的ObjectDataSourceでリストを設定しています。
    SelectedValueはDetailsViewのDataSourceよりEvalでとってます。

    --------source----------
    一つ目
    <EditItemTemplate>
    <asp:DropDownList
    ID="ddlCategory"
    runat="server"
    DataSourceID="CategoryListDataSource"
    DataTextField="Category Name"
    DataValueField="Category ID"
    SelectedValue='<%# Eval("[Category ID]")%>'
    AutoPostBack="True"
    OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged"
    >
    </asp:DropDownList>
    </EditItemTemplate>
    二つ目
    <EditItemTemplate>
    <asp:DropDownList
    ID="ddlProduct"
    runat="server"
    DataTextField="Product Name"
    DataValueField="Product ID"
    AutoPostBack="True"
    OnSelectedIndexChanged="ddlProduct_SelectedIndexChanged"
    >
    </asp:DropDownList>
    </EditItemTemplate>


    二つ目のDropDownListの初期リストはDetailsViewのOnDataBoundメソッドの中で
    一つ目のDropDownListの値を使って動的にObjectDataSourceをバインドして設定してます。
    SelectedValueは退避させておいたラベルより同じOnDataBoundメソッドの最後に設定してます。

    --------source----------
    Protected Sub detailsView_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)

    If detailsView.CurrentMode = DetailsViewMode.Edit Then

    ProductListDataSource.SelectParameters.Clear()
    ProductListDataSource.SelectParameters.Add(New Parameter("categoryID"), TypeCode.String, CType(detailsView.FindControl("ddlCategory"), DropDownList).SelectedValue))

    CType(detailsView.FindControl("ddlProduct"), DropDownList).DataSource = "ProductListDataSource"
    CType(detailsView.FindControl("ddlProduct"), DropDownList).DataBind()
    CType(detailsView.FindControl("ddlProduct"), DropDownList).SelectedValue = CType(detailsView.FindControl("lblProduct"), Label).Text

    End If
    End Sub

    EditモードでDetailsViewが表示された後、一つ目のDropDownListを変更するとSelectedIndexChangedメソッドが発生し、そのメソッドの中で二つ目のDropDownListのリストを動的に書き直します。

    --------source----------
    Protected Sub ddlCategory_SelectedIndexChanged(ByVal sender As Object, Byval e As System.EventArgs)

    CType(detailsView.FindControl("ddlProduct"), DropDownList).Items.Clear()
    CType(detailsView.FindControl("ddlProduct"), DropDownList).ClearSelection()
    ProductListDataSource.SelectParameters.Clear()
    ProductListDataSource.SelectParameters.Add(New Parameter("categoryID",TypeCode.String, CType(detailsView.FindControl("ddlCategory"),DropDownList).SelectedValue))
    CType(detailsView.FindControl("ddlProduct"),DropDownList).SelectedValue = Nothing
    CType(detailsView.FindControl("ddlProduct"),DropDownList).DataSource = ProductListDataSource
    CType(detailsView.FindControl("ddlProduct"),DropDownList).DataBind()

    End Sub

    ここまでは思ったとおりに動いてくれてます。

    ところがその後二つ目のDropDownListの選択ができません。
    一つ目のDropDownListを初期値に選択しなおすと二つ目のDropDownListが変更可能になりますが、一つ目のDropDownListを変更すると二つ目のDropDownListのリストは書き直されますがいつも一番上が選択された状態になってしまいす。

    debugすると一つ目のDropDownListが変更された後に、二つ目のDropDownListをッ変更すると、なぜか一つ目のDropDownListのSelectedIndexChangedメソッドが呼ばれてSelectedValue=Nothingを通っているようなのですが、一つ目のDropDownListが初期値の場合は二つ目のDropDowList変更時に一つ目のSelectedIndexChangedメソッドが呼ばれていません。

    説明がわかりづらくてすいません。
    要は一つ目のDropDownList変更→二つ目のDropDownListのリスト書き直し→二つ目のDropDownList選択、という処理ができればいいんですが・・・。

    どなたかお知恵をお貸しいただければ幸いです。
    よろしくお願いいたします。




親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■5110  DataGridにノード記号を出さないように実装して、MainテーブルとSubテーブルのレコードを削除するには?
□投稿者/ ねっとかふぇ常連 -(2006/07/25(Tue) 19:19:50)

    分類:[VB.NET] 


    分類:[VB.NET] 

    DataGridにノード記号を出さないように実装して、MainテーブルとSubテーブルのレコードを削除するには?


    vb.net 2003

    どうかよろしければ、私の質問に答えてやってください。
    (頑張って表現したつもりではありますが、この文章でうまく伝わるか不安・・)


    次のような構造の2つのテーブルを使います。(KEY)は主キーです。
    [TMAIN] ------ メインテーブル
    CODE_MAIN(KEY)
    F1
    F2

    [TDETAIL] ---- 詳細テーブル
    CODE_MAIN(KEY)
    CODE_SUB(KEY)
    F1
    F2

    フォームにデータグリッド[dgMain]を置いて、そこにはメインテーブル[TMAIN]を表示させます。
    DataSource = DsMain1
    DataMember = TMAIN

    表示はうまく出来ました。

    このときにグリッドの選択された行を削除するボタンを作ることが目的です。
    ただし、
    ・メインテーブルに関連して詳細テーブルのレコードも削除されること。
    ・DataGridにノード記号[+]を出さないように実装すること。
    この2つことを同時に満たしたいのです。


    いろいろ考えた末、以下のようなコードが出来上がりました。
    txtDetailCodeMain を隠しているのですが、もっと良い方法は無いものでしょうか?

    よろしくお願いします。

    ----------------------------------
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    odaMain.Fill(DsMain1, "TMAIN")
    odaDetail.Fill(DsDetail1, "TDETAIL") '
    'odaDetail.Fill(DsMain1, "TDETAIL")

    txtDetailCodeMain.Width = 0
    dgMain.ReadOnly = True
    End Sub

    Private Sub dgMain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles dgMain.Paint
    '行選択
    If Me.BindingContext(DsMain1, "TMAIN").Count > 0 Then
    dgMain.Select(dgMain.CurrentCell.RowNumber)
    End If
    End Sub

    Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
    Dim i As Integer
    Dim mList1 As New ArrayList

    Dim mList2 As New ArrayList

    '選択されたデータグリッドのレコード番号をコレクションに保持
    With dgMain
    Dim mCount As Integer = .BindingContext(.DataSource, .DataMember).Count
    '逆順に入れる
    For i = mCount - 1 To 0 Step -1
    If .IsSelected(i) = True Then
    mList1.Add(i) 'グリッドのレコード番号
    mList2.Add(.Item(i, 0)) 'CODE_MAIN
    End If
    Next i
    End With

    If mList1.Count = 0 Then
    '//削除しない
    Exit Sub
    ElseIf MessageBox.Show("選択した " & mList1.Count.ToString & " 行を削除してもよろしいですか?" & vbCrLf & vbCrLf & _
    "※注意)次のテーブルで該当するレコードが全て削除されます。   " & vbCrLf & vbCrLf & _
    "メインテーブル" & vbTab & "[TMAIN]" & vbCrLf & _
    "詳細テーブル" & vbTab & "[TDETAIL]" & vbCrLf & _
    "" _
    , "削除" _
    , MessageBoxButtons.OKCancel _
    , MessageBoxIcon.Question _
    , MessageBoxDefaultButton.Button2) <> DialogResult.OK Then
    '//削除しない
    Exit Sub
    Else

    '//削除処理
    Do While mList1.Count
    '--------------------------------------------------------------------------------------------
    'メインテーブルポジション移動
    Me.BindingContext(DsMain1, "TMAIN").Position = mList1(0)

    '''--------------------------------------------------------------------------------------------
    '''詳細テーブル削除(メインテーブル削除より先に実行する)
    ''Do While Me.BindingContext(DsMain1, "TMAIN.subMainDetail").Count > 0
    '' Me.BindingContext(DsMain1, "TMAIN.subMainDetail").RemoveAt(0)
    ''Loop


    'DsMain1の中にリレーションシップで、[TDETAIL] を入れると上記のコードでうまく削除できました。
    'が、グリッド[dgMain]の左端に、[+]プラス記号が現れてしまいます。
    '
    'これが嫌なので、もう一つのデータセット[DsDetail1]を作って下記のコードにしてみたら、
    'うまく削除されました。
    'でも、txtDetailCodeMain は、TDETAIL の CODE_MAIN を Bindingして隠したものです。
    'もっと良い方法は無いものでしょうか?

    '--------------------------------------------------------------------------------------------
    '詳細テーブル削除
    i = 0
    Do While i < Me.BindingContext(DsDetail1, "TDETAIL").Count
    Me.BindingContext(DsDetail1, "TDETAIL").Position = i

    If Not (mList2(0) = txtDetailCodeMain.Text) Then
    i += 1
    Else
    Me.BindingContext(DsDetail1, "TDETAIL").RemoveAt(Me.BindingContext(DsDetail1, "TDETAIL").Position)
    End If
    Loop

    '--------------------------------------------------------------------------------------------
    'メインテーブル削除
    Me.BindingContext(DsMain1, "TMAIN").RemoveAt(Me.BindingContext(DsMain1, "TMAIN").Position)
    'Me.BindingContext(DsMain1, "TMAIN").RemoveAt(mList1(0))


    '--------------------------------------------------------------------------------------------
    'コレクションを削除
    mList1.RemoveAt(0)
    mList2.RemoveAt(0)
    Loop

    '再表示
    odaMain.Update(DsMain1, "TMAIN")
    odaDetail.Update(DsDetail1, "TDETAIL") '
    'odaDetail.Update(DsMain1, "TDETAIL")

    DsMain1.Clear()
    odaMain.Fill(DsMain1, "TMAIN")
    DsDetail1.Clear() '
    odaDetail.Fill(DsDetail1, "TDETAIL") '
    'odaDetail.Fill(DsMain1, "TDETAIL")
    End If
    End Sub

親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■4963  PictureBoxに文字列を表示したい
□投稿者/ さすけ -(2006/07/13(Thu) 17:40:26)

    分類:[C#] 


    分類:[C#] 

    さすけです。

    お世話になります。

    PictureBoxに文字列を表示するために、下記のコーディングを行いました。

    ※Visual C# 2005 Express Edition
    ※PictureBox(pictureBox1)はFormに貼り付けたのみ。
    ※PictureBoxにはイメージを設定しておりません。
    ※PictureBoxのプロパティはサイズを変更した程度です。

    ---------------------------------------------------------------------------
    using (Font font = new Font("MS Pゴシック", 15))
    using (Graphics graphics = pictureBox1.CreateGraphics())
    {
    graphics.DrawString("描画テスト",
    font,
    new SolidBrush(Color.Black),
    new Point(10, 10),
    new StringFormat()
    );
    }
    ---------------------------------------------------------------------------

    が、文字列が表示されません・・・orz
    コーディング(引数など)で問題、抜け等がありますでしょうか?

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

親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■7102  Re[8]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ 魔界の仮面弁士 -(2006/10/03(Tue) 14:18:51)

    分類:[C#] 

    2006/10/03(Tue) 14:50:59 編集(投稿者)

    > ただ一つ気になるのは、2003しか入っていない環境にも関わらずRangeのValueプロパティが使えたり

    2003 であろうとなかろうと、Range オブジェクトは、Value プロパティを持っているのでは。
    以下、Excel 8(Excel 97) と Excel 11(Excel 2003) のタイプライブラリの比較。


     [uuid(00020846-0000-0000-C000-000000000046)]
     dispinterface Range
     {
      (…略…)
      #if EXCEL8
       [id(0x00000006), propget]
       VARIANT Value();

       [id(0x00000006), propput]
       void Value([in] VARIANT rhs);
      #elseif EXCEL11
       [id(0x00000006), propget]
       VARIANT Value([in, optional] VARIANT RangeValueDataType);

       [id(0x00000006), propput]
       void Value([in, optional] VARIANT RangeValueDataType, [in] VARIANT rhs);
      #endif
      (…略…)
     };


     [uuid(00020846-0001-0000-C000-000000000046)]
     interface IRange : IDispatch
     {
      (…略…)
      #if EXCEL8
       [propget]
       HRESULT _stdcall Value([in, lcid] long lcid, [out, retval] VARIANT* RHS);

       [propput]
       HRESULT _stdcall Value([in, lcid] long lcid, [in] VARIANT RHS);
      #elseif EXCEL11
       [propget]
       HRESULT _stdcall Value([in, optional] VARIANT RangeValueDataType,
                  [in, lcid] long lcid, [out, retval] VARIANT* RHS);
       [propput]
       HRESULT _stdcall Value([in, optional] VARIANT RangeValueDataType,
                  [in, lcid] long lcid, [in] VARIANT RHS);
      #endif
      (…略…)
     };


    > WorkBookのOpenメソッドの引数がファイルパスのみだったりと、
    Workbook.Open というメソッドは、定義されていないと思います。(Open イベントの事では無いですよね?)

    Workbooks.Opens というメソッドならば定義されていますけれども、それにしても
    「引数がファイルパスのみ」という定義では無く、『[in, optional] VARIANT ReadOnly』などの
    省略可能な引数が十数個ほど用意されているはずです。

    ------------

    <Excel97>
     [id(0x000002aa)]
     HRESULT Open([in] BSTR Filename, /* 12個のoptional引数 */, [in, lcid] long lcid, [out, retval] Workbook** RHS);
    </Excel97>

    <Excel2003>
     [id(0x000002aa)]
     HRESULT _Open([in] BSTR Filename, /* 12個のoptional引数 */, [in, lcid] long lcid, [out, retval] Workbook** RHS);

     [id(0x00000783)]
     HRESULT Open([in] BSTR Filename, /* 14個のoptional引数 */, [in, lcid] long lcid, [out, retval] Workbook** RHS);
    </Excel2003>
記事No.7041 のレス / END /過去ログ6より / 関連記事表示
削除チェック/

■6876  datagridの列名
□投稿者/ 悶々 -(2006/09/27(Wed) 10:36:36)

    分類:[VB.NET] 


    分類:[VB.NET] 

    毎度お世話になっております。
    ↓のプログラムはCSVファイルを読込み、グリッドに表示させるものなんですが、この場合列名は何になるんでしょうか?
    というのも、ソートさせたり抽出させたりするコード
    'dataTable.DefaultView.Sort = "○○○ ASC"

    を追加したいのですが、その時に「列○○○が存在しません」となってしまうのです。
    お願いします。
    --------------------------------------------------------------------------------------------------------------
    Imports System.Data.OleDb
    Public Class Form1
    Inherits System.Windows.Forms.Form
    --------------------------------------------
    -----略-------------------------------------
    --------------------------------------------

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim oConn As New OleDbConnection
    Dim oCommand As New OleDbCommand
    Dim oDataAdapter As New OleDbDataAdapter
    Dim oDataSet As New DataSet
    Dim dataTable As DataTable

    Try
    Dim ts As New DataGridTableStyle 'テーブルスタイル
    Dim cs1 As New DataGridTextBoxColumn 'カラムスタイル1列目
    Dim cs2 As New DataGridTextBoxColumn 'カラムスタイル2列目
    Dim cs3 As New DataGridTextBoxColumn 'カラムスタイル3列目

    'テーブルの作成
    dataTable = oDataSet.Tables.Add("t_Data")

    'DB接続文字列の設定
    oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
    "Data Source=" + Application.StartupPath + "\;" + _
    "Extended Properties=""Text;HDR=NO;FMT=Delimited"""

    'コネクションの設定
    oCommand.Connection = oConn

    'SQL文の設定
    Const strSelectSyain As String = _
    "SELECT * FROM vb.csv "
    oCommand.CommandText = strSelectSyain

    'データを取得する
    oDataAdapter.SelectCommand = oCommand
    oDataSet.Clear()
    oDataAdapter.Fill(oDataSet, "t_Data")

    'テーブルスタイルの作成
    ts.MappingName = dataTable.TableName

    'カラムスタイルの作成
    cs1.MappingName = dataTable.Columns(0).ColumnName 'カラム名のセット
    cs1.HeaderText = "製造番号" '列名の見出しのセット

    cs2.MappingName = dataTable.Columns(1).ColumnName 'カラム名のセット
    cs2.HeaderText = "納期" '列名の見出しのセット

    cs3.MappingName = dataTable.Columns(2).ColumnName 'カラム名のセット
    cs3.HeaderText = "受注先" '列名の見出しのセット

    'テーブルスタイル/カラムスタイルの適用
    DataGrid1.TableStyles.Add(ts)
    ts.GridColumnStyles.Add(cs1)
    ts.GridColumnStyles.Add(cs2)
    ts.GridColumnStyles.Add(cs3)

    'DataGridに設定を反映
    DataGrid1.SetDataBinding(oDataSet, dataTable.TableName)

    Catch oExcept As Exception
    '例外が発生した時の処理
    MessageBox.Show(oExcept.ToString, "エラー")

    End Try
    End Sub
    End Class
    -------------------------------------------------------------------------------------------------------------------
親記事 /0過去ログ6より / 関連記事表示
削除チェック/

■6796  DataGridでIndexOutOfRangeExceptionが発生する
□投稿者/ もんもん -(2006/09/25(Mon) 14:36:14)

    分類:[VB.NET] 


    分類:[VB.NET] 

    あるHPを参考にしてデータグリッドを行選択モードにしよう思い以下のプログラムをつけたしたのですが
    「'System.IndexOutOfRangeException' のハンドルされていない例外が system.windows.forms.dll で発生しました。
    追加情報 : インデックスが配列の境界外です。」
    となってしまいます。
    csv形式のデータを読み取ってデータグリッドに表示させていますので、おそらく読み始める時は行が0行なので例外が発生するものと思うのですが、これをどうやって解決したらいいでしょうか。



    -----------------------------------------------------------------------------------
    Private Sub datagrid1_Paint(ByVal sender As Object, ByVal e As System. _
    Windows.Forms.PaintEventArgs) Handles dbgShohin.Paint
    datagrid1.Select(dbgShohin.CurrentCell.RowNumber)
    End Sub
    ----------------------------------------------------------------------------------



    --
    タイトルを編集しました
    中@管理人
親記事 /0過去ログ6より / 関連記事表示
削除チェック/

■6823  Re[3]: ウェブブラウザもどきを作成中
□投稿者/ 魔界の仮面弁士 -(2006/09/25(Mon) 22:20:53)

    分類:[VB.NET] 

    > 1番の方法でお願いします

    うーむ。提示した3種の中では、もっとも一番難易度が高い気も。(^^;
    とりあえず、こんな感じとか。

    -------------------------
    Option Strict Off
    Imports System.Runtime.InteropServices

    <ComImport(), Guid("64AB4BB7-111E-11D1-8F79-00C04FC2FBE1")> _
    Public Class ShellUIHelper
    End Class

    Module Module1

    Sub Main()
    Dim url As String = "http://www.google.co.jp/webhp?complete=1&hl=ja"
    Dim title As String = "サジェスト"

    Dim helper As Object = Nothing
    Try
    helper = New ShellUIHelper()

    MsgBox("お気に入りの整理")
    helper.ShowBrowserUI("OrganizeFavorites", 0)

    MsgBox("お気に入りの追加")
    helper.AddFavorite(url, CObj(title))
    Finally
    If helper IsNot Nothing AndAlso Marshal.IsComObject(helper) Then
    Marshal.ReleaseComObject(helper)
    End If
    End Try
    End Sub

    End Module
    -------------------------

    でもって、取り出しについては……
    Dim Path As String = Environment.GetFolderPath(Environment.SpecialFolder.Favorites)
    で示されるパスの内容を列挙して、ショートカットを調べるとか。


    > ラベルか何かを追加してと検討違いな事を考えていました。
    VB2005 で、ApplicationSettings のプロパティ連結機能を使えば、
    コントロールの内容を自動セーブ/自動ロードさせる事が可能なので、
    その方法でも不可能ではなかったりします。
    http://www.microsoft.com/japan/msdn/vs05/vbasic/vbmysettings.aspx


    > 3番のファイル入出力の方法について魔界の仮面弁士さんがお勧めの参照ページがありましたら教えて頂けませんか?

    ファイル入出力の方法はいろいろありますが、たとえば、XmlSerializer や
    BinaryFormatter を使うという方法があります。下記を参照してみてください。

    [オブジェクトの内容をXMLファイルに保存、復元する]
    http://dobon.net/vb/dotnet/file/xmlserializer.html

    [オブジェクトをXMLでシリアライズ]
    http://www.atmarkit.co.jp/fdotnet/easyxml/index/index.html

    [XML シリアル化の概要]
    http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconintroducingxmlserialization.asp
    http://msdn2.microsoft.com/ja-jp/library/182eeyhh.aspx

記事No.6815 のレス /0過去ログ6より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>

ヒット件数が多いので過去ログ1〜20 までの検索結果 / 過去ログ21からさらに検索→

パスワード/

- Child Tree -