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 >>
■43107  Re[1]: クリスタルレポートの詳細わけ
□投稿者/ ふるあ -(2009/10/29(Thu) 09:14:00)
    試行錯誤の結果、サブレポートの追加により作成できました。

    が次の問題が出てきてしまいました。

    詳細の中身はWhileで回っているような気がします。
    データの数だけ同じ処理?
    行ないたい作業は
    10個の行が先に詳細に有る場合に、データの数(例えとして2)だけ表示させて
    のこりは何も記述しないということを行ないたいのですが

    先に10個の行を書いて
    ----------
    1
    ----------
    ----------
    2
    ----------
    ----------
    3
    ----------
    ~~~
    ----------
    10
    ----------

    DBから受け取った値を、リソース?しても最初の1行にしかデータが表示されません。
    ----------
    1 DATA1
    ----------
    ----------
    2 ここから表示されない
    ----------
    ----------
    3
    ----------
    ~~~
    ----------
    10
    ----------

    詳細を1行だけの作成にすると、データ数の行が作成されるのですが
    ----------
    1 DATA1
    ----------
    ----------
    2 DATA2
    ----------
    ここで終了 以降行作成なし。

    10に満たない行になってしまった場合に
    下のほうが空白になってしまい、求めている結果と違ってしまいます。

    先に10行作成し
    好きなだけデータを配置する方法はあるのでしょうか。

    ご指導よろしくお願いします。
記事No.43087 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43283  宣伝・広告スレの報告
□投稿者/ みきぬ -(2009/11/04(Wed) 14:30:15)
親記事 /過去ログ74より / 関連記事表示
削除チェック/

■43267  ADO.NETで御質問御願いいたします。
□投稿者/ がながな -(2009/11/04(Wed) 12:17:47)

    分類:[.NET 全般] 

    お世話になります。
    今まではADOを使用していたのですが、このたびADO.NETに変更しようかと思い、御登校させていただきます。
    早速ですが、「商品マスタ」テーブルにオートナンバー型のフィールドIDとテキスト型のフィールド商品名があります。
    ADOの時は、

    dim ADDID as long
    rs.addnew
    rs!商品名="TEST"
    rs.UPDATE
    ADDID=rs!ID
    debug.peint ADDID

    とした時、オートナンバー型のフィールドの値が表示されました。

    ADO.NETで下記のようにやってみたのですが、上手く行きません
    MyRow("商品名") = "TEST"
    MyTable.Rows.Add(MyRow)
    Mycmd = New SqlCommandBuilder(MyAdapter)
    MyAdapter.InsertCommand = Mycmd.GetInsertCommand

    '//---sqlDataadapterオブジェクトを更新
    MyAdapter.Update(MyDataSet, "TU2101_納品リスト")

    '-------------ここが知りたいです。-----------------
    '//---メインIDを取得
    ADDID= MyTable.Rows(0)("ID")
    debug.print ADDID



    ADO.NETとした場合、どのようにすればこれが実現できるのでしょうか?
    よろしく御願いいたします。
親記事 /過去ログ74より / 関連記事表示
削除チェック/

■43349  ADO.NETで最終レコードまで更新したいのですが
□投稿者/ がながな -(2009/11/06(Fri) 13:35:58)

    分類:[.NET 全般] 

    いつもお世話になります。
    テーブル内の金額フィールドを全て更新したいのですが、アクションクエリを使用する以外に方法ってありますか?
    ADOですと、
    *********************************************************************************
    do until rs商品マスタ.eof
    rs商品マスタ!金額=0
    rs商品マスタ.update
    rs商品マスタ.movenext
    loop
    *********************************************************************************

    と言う構文をADO.NETで実現したいのですが、以下のように現在記述したのですが、この状態ですと、1行目のみ金額:0円になります。次のレコードへ行くための記述方法がわかりません。
    **********************************************************************************
    MySQL = "select " _
    & "金額" _
    & " from " _
    & "[T0000_商品マスタ]"
    ad商品マスタ = New SqlDataAdapter(MySQL, cnn)

    '++++++++++++++++++++++++++++++++++++++++++++++++++++++++'
    ' データセット
    '++++++++++++++++++++++++++++++++++++++++++++++++++++++++'
    ds商品マスタ = New DataSet
    ad商品マスタ.Fill(ds商品マスタ, "T0000_商品マスタ")
    tb商品マスタ = ds商品マスタ.Tables("T0000_商品マスタ")
    If tb商品マスタ.Rows.Count <> 0 Then



    '----------------------------------------------------'
    ' 更新開始
    '----------------------------------------------------'
    rw商品マスタ = tbASO.Rows(0)
    rw商品マスタ.BeginEdit()
    rw商品マスタ("金額") = 0
    rw商品マスタ.EndEdit()
    '//---自動生成コマンド作成
    cmd商品マスタ = New SqlCommandBuilder(ad商品マスタ)
    ad商品マスタ.UpdateCommand = cmdASO.GetUpdateCommand
    ad商品マスタ.Update(ds商品マスタ, "T0000_商品マスタ")

    End If
    ****************************************************************************************

    以上よろしく御願いいたします。
親記事 /過去ログ74より / 関連記事表示
削除チェック/

■43372  C# から xdoc2txt を使おうとして
□投稿者/ マーチン -(2009/11/07(Sat) 10:23:35)

    分類:[C#] 

    C# 初心者です。自分で解決できないので、教えてください。

    バイナリ文書からテキストを抽出 するツール「xdoc2txt」
     http://www31.ocn.ne.jp/~h_ishida/xdoc2txt.html
    を使おうとして、以下のようなコードを書いたのですが、abc01.txt に結果が出力されません。
    コマンドプロンプトから、
     "C:\Program Files\xdoc2txt\xdoc2txt.exe" "c:\abc.txt" > abc01.txt
    を実行すると出力されます。

    -----------------
    System.Diagnostics.ProcessStartInfo xdoc = new System.Diagnostics.ProcessStartInfo();
    xdoc.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
    xdoc.Arguments = @"/c ""C:\Program Files\xdoc2txt\xdoc2txt.exe"" ""c:\abc.txt"" > abc01.txt";
    System.Diagnostics.Process p = System.Diagnostics.Process.Start(xdoc);
    p.WaitForExit();
    -----------------

    3行目を
    xdoc.Arguments = @"/c ""C:\Program Files\xdoc2txt\xdoc2txt.exe"" c:\abc.txt > abc02.txt";
    に変更すると動きますが、スペースの入ったフォルダにパスを通せなくなるし。。。

    よろしくお願いします。
親記事 /過去ログ74より / 関連記事表示
削除チェック/

■43612  パネルのスクロールについて
□投稿者/ める -(2009/11/13(Fri) 14:38:06)

    分類:[C#] 

    お世話になります。以前同様の質問をしたのですが、
    解決に至らなかったため、再度サンプルソースを
    掲載して質問させてください。

    Panel上にTextBoxを用意します。
    このTextBoxはPanelのサイズを越えた大きさです。
    PanelのAutoScrollプロパティをTrueにしている為、
    自動的に垂直スクロールバーが表示されています。
    スクロールバー自体の操作でスクロールは勿論のことですが、
    ▲▼ボタンでも上下させたいと考えています。

    問題は起動直後に下を見るために上にスクロールさせようとして、
    「▼ボタン」を押下した際、VerticalScroll.Valueの値に「3」が
    入ってしまいます。
    また、それ以降ボタンを押すとスクロールバーが無反応→スクロール
    →無反応の繰り返しになってしまいます。(但しPanelの中身自体は
    スクロールしてる・・・)

    原因がわからないのでどなたか知恵をお貸し下さい。
    環境はVS2005/C#/.net2.0です。宜しくお願いします。

    --------------------------------------------------
    public partial class Form9 : Form
    {
    private System.Windows.Forms.Panel panel1;
    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.Button button2;
    private System.Windows.Forms.TextBox textBox2;
    private System.Windows.Forms.TextBox textBox3;

    public Form9()
    {
    InitializeComponent();
    }

    // フォームロード
    private void Form9_Load(object sender, EventArgs e)
    {
    this.textBox2.Text += String.Format("Panel-Width:{0}\r\n", this.panel1.Width);
    this.textBox2.Text += String.Format("Panel-Height:{0}\r\n", this.panel1.Height);
    this.textBox2.Text += String.Format("TextBox-Width:{0}\r\n", this.textBox1.Width);
    this.textBox2.Text += String.Format("TextBox-Height:{0}\r\n", this.textBox1.Height);

    this.textBox2.Text += String.Format("VerticalScroll-Maximum:{0}\r\n", this.panel1.VerticalScroll.Maximum);
    this.textBox2.Text += String.Format("VerticalScroll-Minimum:{0}\r\n", this.panel1.VerticalScroll.Minimum);
    this.textBox2.Text += String.Format("VerticalScroll-LargeChange:{0}\r\n", this.panel1.VerticalScroll.LargeChange);
    this.textBox2.Text += String.Format("VerticalScroll-SmallChange:{0}\r\n", this.panel1.VerticalScroll.SmallChange);
    this.textBox2.Text += String.Format("VerticalScroll-Value:{0}\r\n", this.panel1.VerticalScroll.Value);
    }

    // ▼キーを押した時
    private void button2_Click(object sender, EventArgs e)
    {
    if (this.panel1.VerticalScroll.Value + 100 <= this.panel1.VerticalScroll.Maximum)
    {
    this.panel1.VerticalScroll.Value += 100;
    }
    else
    {
    this.panel1.VerticalScroll.Value = this.panel1.VerticalScroll.Maximum;
    }

    this.textBox3.Text = this.panel1.VerticalScroll.Value.ToString();
    }

    // ▲キーを押した時
    private void button1_Click(object sender, EventArgs e)
    {
    if (this.panel1.VerticalScroll.Minimum <= this.panel1.VerticalScroll.Value - 100)
    {
    this.panel1.VerticalScroll.Value -= 100;
    }
    else
    {
    this.panel1.VerticalScroll.Value = this.panel1.VerticalScroll.Minimum;
    }

    this.textBox3.Text = this.panel1.VerticalScroll.Value.ToString();
    }

    // 初期化
    private void InitializeComponent()
    {
    this.panel1 = new System.Windows.Forms.Panel();
    this.textBox1 = new System.Windows.Forms.TextBox();
    this.button1 = new System.Windows.Forms.Button();
    this.button2 = new System.Windows.Forms.Button();
    this.textBox2 = new System.Windows.Forms.TextBox();
    this.textBox3 = new System.Windows.Forms.TextBox();
    this.panel1.SuspendLayout();
    this.SuspendLayout();
    //
    // panel1
    //
    this.panel1.AutoScroll = true;
    this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
    this.panel1.Controls.Add(this.textBox1);
    this.panel1.Location = new System.Drawing.Point(12, 12);
    this.panel1.Name = "panel1";
    this.panel1.Size = new System.Drawing.Size(281, 308);
    this.panel1.TabIndex = 0;
    //
    // textBox1
    //
    this.textBox1.Location = new System.Drawing.Point(3, 3);
    this.textBox1.Multiline = true;
    this.textBox1.Name = "textBox1";
    this.textBox1.Size = new System.Drawing.Size(256, 548);
    this.textBox1.TabIndex = 0;
    //
    // button1
    //
    this.button1.Location = new System.Drawing.Point(77, 524);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(65, 54);
    this.button1.TabIndex = 1;
    this.button1.Text = "▲";
    this.button1.UseVisualStyleBackColor = true;
    this.button1.Click += new System.EventHandler(this.button1_Click);
    //
    // button2
    //
    this.button2.Location = new System.Drawing.Point(160, 524);
    this.button2.Name = "button2";
    this.button2.Size = new System.Drawing.Size(65, 54);
    this.button2.TabIndex = 2;
    this.button2.Text = "▼";
    this.button2.UseVisualStyleBackColor = true;
    this.button2.Click += new System.EventHandler(this.button2_Click);
    //
    // textBox2
    //
    this.textBox2.Location = new System.Drawing.Point(12, 326);
    this.textBox2.Multiline = true;
    this.textBox2.Name = "textBox2";
    this.textBox2.Size = new System.Drawing.Size(281, 116);
    this.textBox2.TabIndex = 3;
    //
    // textBox3
    //
    this.textBox3.Location = new System.Drawing.Point(12, 461);
    this.textBox3.Multiline = true;
    this.textBox3.Name = "textBox3";
    this.textBox3.Size = new System.Drawing.Size(281, 27);
    this.textBox3.TabIndex = 4;
    //
    // Form9
    //
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(306, 590);
    this.Controls.Add(this.textBox3);
    this.Controls.Add(this.textBox2);
    this.Controls.Add(this.button2);
    this.Controls.Add(this.button1);
    this.Controls.Add(this.panel1);
    this.Name = "Form9";
    this.Text = "Form9";
    this.Load += new System.EventHandler(this.Form9_Load);
    this.panel1.ResumeLayout(false);
    this.panel1.PerformLayout();
    this.ResumeLayout(false);
    this.PerformLayout();

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

■43639  AvtiveReportのサブレポートの改ページ連動について
□投稿者/ くるみ306 -(2009/11/14(Sat) 15:18:44)

    分類:[VB.NET/VB2005 以降] 

    お世話になっております

    早速ですが、ActiveReportの改ページ制御の件で、ご教示お願いいたします

    version
    for .NET 3.0J SP3

    を使用しています

    下記のようなレイアウトで、明細B、明細Cにそれぞれサブレポートを配置し、
    1ページ目を表示するところまでは行きました

    明細A,B,Cとも同じDataTableを使用しており、全て同じ行数が出力される
    設計にしております。

    ------------ PageFotter --------------
    >>> 固定情報 <<<
    ------------   Detail ------------
    >>>>>>明細A<<<<<<
    (最大行数10行固定)
    ------------ PageFotter ------------
    >>> 固定情報 <<<
    >>>>>>明細B<<<<<<  >>>>>>明細C<<<<<<
    (最大行数10行固定)(最大行数10行固定)


    現状としては、11行目以降を表示するのに次ページボタンを押すと、
    明細Aは11行目以降がキチンと表示されますが、
    明細B、明細Cは1ページ目のままになってしまいます。

    明細B、明細Cも明細Aと同じ行情報を出力するにはどうしたらいいのでしょうか?

    なお、こちらの書き込みを参考にさせていただきましたが、
    少し、実現したいことが違うのではないかと判断しました

    ttp://dobon.net/vb/bbs/log3-16/9313.html


    どうぞ、よろしくおねがいいたします
親記事 /過去ログ74より / 関連記事表示
削除チェック/

■43525  FlexGridのソートを教えてください。
□投稿者/ 初心者です。 -(2009/11/12(Thu) 09:01:04)

    分類:[ASP.NET (VB)] 

    今vb.netでソートがうまくいきません。

    一覧に二つのデータセットを利用して、表示しています。

    二つのデータセットの構造は違いますが、同じ項目を抽出して、表示しています。
    DS1とDS2の予定日と番号でソートしたいです。よろしく、お願いいたします。

    -------------------------------------------------------
        予定日      番号
    2009/11/01 xxx001
    2009/11/01 xxx002
    2009/11/02 yyy001
    2009/11/03 zzz001 まず、見るのが予定日で、次番号ですが、ソートできません。

          .Sort(SortFlags.UseColSort, 14, 9) これも、うまくいきません。
    .Sort(SortFlags.Ascending, 14, 9) これも、うまくいきません。

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

■44494  アプリケーションの設定の保存について
□投稿者/ jun -(2009/12/10(Thu) 10:34:22)

    分類:[C#] 

    2009/12/10(Thu) 10:36:48 編集(投稿者)
    2009/12/10(Thu) 10:36:29 編集(投稿者)

    <pre><pre>XMLに格納したファイルのパスに日本語が含まれているとエラーが出ます。
    日本語は使用できないのでしょうか?

    環境
    WindosXP SP3
    VisualC# 2008 Express


    XMLファイルの中身(settings.config)-----------------------------------------------------------------------
    <?xml version="1.0"?>
    <Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Path>C:\でーた\Data.txt</Path>
    </Settings>
    ---------------------------------------------------------------------------------------------------------


    //"Settings"クラス
    public class Settings
    {
    private string _text;

    public string Text
    {
    get {return _text;}
    set {_text = value;}
    }

    public Settings()
    {
    _text = "Text";
    }
    }

    //読み込み部分
    Settings appSettings = new Settings();

    string fileName = Application.StartupPath + "\\settings.config";

    System.Xml.Serialization.XmlSerializer serializer2 =
    new System.Xml.Serialization.XmlSerializer(typeof(Settings));

    System.IO.FileStream fs2 =
    new System.IO.FileStream(fileName, System.IO.FileMode.Open);

    appSettings =
    (Settings) serializer2.Deserialize(fs2);  //ここでエラー
                            //InvalidOperationExceptionはハンドルされませんでした。
    //XML ドキュメント (3,14) でエラーが発生しました。
    fs2.Close();
    </pre></pre>
親記事 /過去ログ75より / 関連記事表示
削除チェック/

■44590  定義ファイルから取得したSTRINGデータをINTGERへ
□投稿者/ 初心者 -(2009/12/13(Sun) 14:04:17)

    分類:[VB.NET/VB2005 以降] 

    お世話になります。
    色の定義ファイルから取得した、値の例:
    <!-- ColYellow -->
    <ColYellow>255, 255, 153</ColYellow>
    ----------------------------------------------
    ソース側にてFlexGridのStylesに設定したいですが、

     dim ColYellow as String = "255, 255, 153"←定義ファイルから取得した値String型です。
     下のBackColorに設定したいですが、Intger型が必要ですが
    d_flx_tana_prop.Styles.Add("ColYellow")           ↓↓↓↓↓ここでInteger型が必要ですが、どうすれば、うまく設定することができますか
    d_flx_tana_prop.Styles("ColBlue").BackColor = Color.FromArgb(ColYellow )


    よろしく、お願いいたします。
親記事 /過去ログ75より / 関連記事表示
削除チェック/

■44652  VBの置換について。ひとつだけ置換は・・・できない??
□投稿者/ やまり -(2009/12/15(Tue) 00:55:32)

    分類:[.NET 全般] 

    畏れ入ります。

    VB.NETの勉強をしております。

    文字列の置換なのですが、ちょっと思いついたことがあって、簡単に実現できるかと思いきや・・・
    できずに恥ずかしながら質問いたします。

    <<やりたいこと>>

    「これ」にマッチしたどれかひとつを「あれ」に変換したい。

    フォーム1・・・入力例「これとこれとこれとこれ」
    フォーム2・・・出力例「これとあれとこれとこれ」


    ---------------
    あまりいい例が思いつかず、わかりにくい例で申し訳ありません。
    もう少し書くとやりたいことは
    ・文字列の置換
    ・検索文字列は複数あり、そのうちひとつだけを置換

    いろいろ考えて、まずは(1)(2)・・のように置換する方法を思いつきました。


    「これとこれとこれとこれ」

    「(1)と(2)と(3)と(4)」
    ↓(1)〜(4)のうちどれかをランダムで→「あれ」に置換
    「(1)と(2)とあれと(4)」
    ↓残った(\d)を「これ」で置換しなおす。
    「これとこれとあれとこれ」

    しかし、VBのreplaceは「すべてを置換」してしまうのですね・・・
    javaだとreplaceallと分かれているのですけど・・・・

    なんだか自分でも考えすぎているような気がしています。


    ・もっと簡単なロジックで実現できそうでしょうか?
    ・マッチした文字列一つ目だけを置換、はできないのでしょうか?

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

■44681  Re[1]: VBの置換について。ひとつだけ置換は・・・できない??
□投稿者/ 魔界の仮面弁士 -(2009/12/15(Tue) 19:35:54)
    No44652 (やまり さん) に返信
    > 文字列の置換なのですが、ちょっと思いついたことがあって、
    
    Replace 系のメソッドを使わずに実装してみました。
    
    -----------
    Dim src As String = "これとこれとこれとこれ"
    Dim before As String = "これ"
    Dim after As String = "あれ"
    
    'Split 関数を使い、「これ」で分断して配列にする
    Dim X As New List(Of String)(Split(src, before))
    
    If X.Count > 2 Then
        '何番目を置き換えるかをランダムに決定
        Dim R As New Random()
        Dim I As Integer = R.Next(X.Count - 1)
    
        'その場所を「あれ」で繋げる
        X(I) &= after & X(I + 1)
    
        '繋いだ場所は取り除く
        X.RemoveAt(I + 1)
    End If
    
    '置き換えなかった場所をすべて「これ」で繋ぎ直して、文字列に戻す
    Dim dst As String = Join(X.ToArray(), before)
記事No.44652 のレス /過去ログ76より / 関連記事表示
削除チェック/

■44728  DataGridViewのComboBoxセルの変換について
□投稿者/ める -(2009/12/16(Wed) 18:11:51)

    分類:[C#] 

    いつもお世話になっております。
    二つのテーブルがあります。

    <<テーブルA>>           <<テーブルB>>
    ID 名前  地域コード フラグ   ID 地域コード 地域名
    10 あああ     1 true    01 1 北海道
    11 いいい     2 false    02 2 東北
    12 ううう     3 true 03 3 関東
    13 えええ     4 true 04 4 九州


    <<テーブルA>>をDataGridViewに表示するのですが、
    地域コードの部分は<<テーブルB>>の「地域名」を
    表示したいと思っています。
    また変更を可能にする為、地域名はComboBox型のセルで
    ユーザが選択可能にします。

    こんな感じです。(▼はComboBoxセルとお考え下さい。)
    -------------------------------------
    ID 名前 地域名 フラグ
    10 あああ  北海道▼ true
    11 いいい   東北▼ false
    12 ううう   関東▼ true
    13 えええ   九州▼ true
    -------------------------------------

    ComboBox型のセルのDisplayMemberに<<テーブルB>>の地域名、
    ValueMemberに地域コードのフィールド名を指定したのですが、
    実行して表示をすると、

    「FormatException: DataGridViewComboBoxCellの値が有効ではありません。」

    のメッセージが表示されます。

    実は、テーブルAの地域コードがvarcharで、
    テーブルBの地域コードがintと言う事が発覚し、
    これが原因で変換が出来ないのかと推測しています。
    (既存部分の兼ね合いでフィールドの型の変更は不可です。)

    この推測が当たっている場合、どのようにすれば変換出来るのか、
    また外れている場合は何が考えられるかをお教え頂けませんか?

    VS2005/C#/.net2.0です。
    宜しくお願い致します。
親記事 /過去ログ76より / 関連記事表示
削除チェック/

■44757  Re[5]: DataGridViewのComboBoxセルの変換について
□投稿者/ める -(2009/12/17(Thu) 10:58:49)
    遅くなりました。レスありがとうございます。
    
    ■No44746 (gtk2k さん) に返信
    > コンボボックスにセットするデータを取得時にデータ型を変換すればいいと思うんだが
    > SELECT CONVERT(NVARCHAR, PLACE_CODE) AS PLACE_CODE, PLACE_NAME FROM TableB
    
    やってみましたが、やはりうまくいきません。
    型の違いではないような気がします。
    
    一応抜粋ですが、最低限の部分です。
    -------------------------
    private void GetDataFromDB()
    {
        // データをテーブルから取得する
        dataAdapter.FillDataSet(ds.TableA, "Select * from テーブルA");
        dataAdapter.FillDataSet(ds.TableB, "Select * from テーブルB"); // gtk2kさんのSQL文も試しましたが変わらずです。
    
        // 各BindingSourceにDBのテーブルをアタッチする
        this.mTableADataTableBindingSource.DataSource = ds.TableA;
        this.mTableBDataTableBindingSource.DataSource = ds.TableB;
    }
    
    また、表示させるDataGridViewのComboBoxColumnのプロパティは
    
    [DataPropertyName]:AreaCode(テーブルAの地域コードです)
    [DataSource]:mTableBDataTableBindingSource;(テーブルBへのアタッチ用BindingSource)
    [DisplayMember]:AreaName(テーブルBの地域名です。)
    [ValueMember]:AreaCode(テーブルBの地域コードです)
    
    ---------------------------
    あまり意味がないかも知れませんが
    通常のComboBoxでも同様のテーブルを
    アタッチして試してみました・・・
    
    this.ComboBox1.SelectedValue = 1
    this.ComboBox1.SelectedValue = "1"
    
    のどちらでも"北海道"と表示されました。
    
    今回の場合はDataGridViewなので、
    SelectedValueは関係ないとは思うのですが
    内部的に呼ばれていたりしないのかな・・・と。
    
    RowsAddedイベントとかで変換してやる等
    しないといけないんでしょうか。
    編集後はまたDBに反映させるので、
    再変換等あまりしたくはないのですが・・・。
    
    すみませんがもう少し回答お待ちします。
    
記事No.44728 のレス /過去ログ76より / 関連記事表示
削除チェック/

■44415  C# XMLファイル形式の指定要素の属性値取得
□投稿者/ Bianchi -(2009/12/08(Tue) 23:28:48)

    分類:[C#] 

    開発環境:Visual Studio 2008
    使用言語:C#
    ------------------------------------------------------------------------------------------
    XMLファイル形式で記述されているファイルの指定要素から属性値を取り出したいです。
    ※GPSデータです。

    下記ファイルの中身にあるとおり
    <Trackpoint>
    <Time>2009-10-10T23:28:09Z</Time>
    <Position>
    <LatitudeDegrees>34.8101051</LatitudeDegrees>
    <LongitudeDegrees>135.3483362</LongitudeDegrees>
    </Position>
    <AltitudeMeters>64.0650635</AltitudeMeters>
    <DistanceMeters>0.0000000</DistanceMeters>
    <HeartRateBpm xsi:type="HeartRateInBeatsPerMinute_t">
    <Value>66</Value>
    </HeartRateBpm>
    <SensorState>Absent</SensorState>
    <Extensions>
    <TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2" CadenceSensor="Bike"/>
    </Extensions>
    </Trackpoint>
    という、連続したデータが不特定秒毎にあります。
    このデータから<Time><LatitudeDegrees><LongitudeDegrees><AltitudeMeters><DistanceMeters><Value>の要素と取り込み
    String[][] strに対して
    str[0][0]・・・timeデータ
    str[0][1]・・・LatitudeDegreesデータ
    str[・・・
    とValueデータまで取り込み、
    次のTime分を
    str[1][0]・・・timeデータ(先程のデータの次)
    str[1][1]・・・LatitudeDegreesデータ
    といった具合に格納。

    ただし、timeデータは確実にあるのですが、LatitudeDegreeやその他のデータが空であったり、その要素すらない場合
    がございます。
    <Trackpoint>
    <Time>2009-10-10T23:28:08Z</Time>
    </Trackpoint>
    のように。

    なんとかXMLのデータとして読込みたいので、お力をお貸し願います。
    要素があったりなかったりというのに、うまく対応できません。

    --XMLファイルの中身-----------------------------------------------------------------------
    <Activities>
    <Activity Sport="Biking">
    <Id>2009-10-10T23:28:05Z</Id>
    <Lap StartTime="2009-10-10T23:28:05Z">
    <TotalTimeSeconds>567.5500000</TotalTimeSeconds>
    <DistanceMeters>2138.0234375</DistanceMeters>
    <MaximumSpeed>12.3328228</MaximumSpeed>
    <Calories>185</Calories>
    <AverageHeartRateBpm xsi:type="HeartRateInBeatsPerMinute_t">
    <Value>127</Value>
    </AverageHeartRateBpm>
    <MaximumHeartRateBpm xsi:type="HeartRateInBeatsPerMinute_t">
    <Value>140</Value>
    </MaximumHeartRateBpm>
    <Intensity>Active</Intensity>
    <TriggerMethod>Manual</TriggerMethod>
    <Track>
    <Trackpoint>
    <Time>2009-10-10T23:28:08Z</Time>
    </Trackpoint>
    <Trackpoint>
    <Time>2009-10-10T23:28:09Z</Time>
    <Position>
    <LatitudeDegrees>34.8101051</LatitudeDegrees>
    <LongitudeDegrees>135.3483362</LongitudeDegrees>
    </Position>
    <AltitudeMeters>64.0650635</AltitudeMeters>
    <DistanceMeters>0.0000000</DistanceMeters>
    <HeartRateBpm xsi:type="HeartRateInBeatsPerMinute_t">
    <Value>66</Value>
    </HeartRateBpm>
    <SensorState>Absent</SensorState>
    <Extensions>
    <TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2" CadenceSensor="Bike"/>
    </Extensions>
    </Trackpoint>
    <Trackpoint>
    <Time>2009-10-10T23:28:10Z</Time>
    <Position>
    <LatitudeDegrees>34.8101310</LatitudeDegrees>
    <LongitudeDegrees>135.3483426</LongitudeDegrees>
    </Position>
    <AltitudeMeters>65.5070801</AltitudeMeters>
    <DistanceMeters>3.4017792</DistanceMeters>
    <HeartRateBpm xsi:type="HeartRateInBeatsPerMinute_t">
    <Value>67</Value>
    </HeartRateBpm>
    <SensorState>Absent</SensorState>
    <Extensions>
    <TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2" CadenceSensor="Bike"/>
    </Extensions>
    </Trackpoint>
    <Trackpoint>
    <Time>2009-10-10T23:28:15Z</Time>
    <Position>
    <LatitudeDegrees>34.8103160</LatitudeDegrees>
    <LongitudeDegrees>135.3483677</LongitudeDegrees>
    </Position>
    <AltitudeMeters>63.1036377</AltitudeMeters>
    <DistanceMeters>23.7893047</DistanceMeters>
    <HeartRateBpm xsi:type="HeartRateInBeatsPerMinute_t">
    <Value>73</Value>
    </HeartRateBpm>
    <SensorState>Absent</SensorState>
    <Extensions>
    <TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2" CadenceSensor="Bike"/>
    </Extensions>
    </Trackpoint>
         ・・・・・
    -------------------------------------------------------------------------------------------------------
親記事 /過去ログ76より / 関連記事表示
削除チェック/

■44419  Re[2]: C# XMLファイル形式の指定要素の属性値取得
□投稿者/ Bianchi -(2009/12/09(Wed) 00:14:09)
    No44416 (επιστημη さん) に返信
    >>なんとかXMLのデータとして読込みたいので、お力をお貸し願います。
    >>要素があったりなかったりというのに、うまく対応できません。
    >
    > コード見せてください。
    >
    -------------------------------------------------------------------------------------

    private const string nodeText =
    "[name()='Time' or name()='LatitudeDegrees' " +
    "or name()='LongitudeDegrees' or name()='AltitudeMeters '" +
    "or name()='DistanceMeters' or name()='Value']";
    private XmlDocument doc;


    private void GetData() {

    DialogResult ret = this.ofd.ShowDialog();
    List<string> list = new List<string>();

    if (ret == DialogResult.OK) {

    doc = new XmlDocument();
    doc.PreserveWhitespace = false;
    doc.Load(ofd.FileName);
    foreach ( XmlNode node in doc.SelectNodes( "//*" + nodeText + "/text()|//@*" + nodeText ) ) {
    list.Add( node.Value );
    }
    // Listの中に一旦格納した後、str[][] に順番に入れる<省略>

    } else {

    }
    }

        これで、指定要素の属性は取得できるのですが、抜けがあったりしても関係なく順番に Listに格納されて
        しまうので、あとでstr[][]へ格納できない状態です。
記事No.44415 のレス /過去ログ76より / 関連記事表示
削除チェック/

■44472  Re[4]: C# XMLファイル形式の指定要素の属性値取得
□投稿者/ Bianchi -(2009/12/09(Wed) 22:15:54)
    No44421 (渋木宏明(ひどり) さん) に返信
    > 値と、値が存在する/しないを表現したいなら、Nullable 使えばいいのでは。
    >

    Nullableの使い方をネットで調べましたが、Nullの場合は代用値を入れる 等の処理ができるようで、
    使っていけそうですが、要素(ルート)自体がない場合には適用できなさそうですが、どうなんでしょうか?

    で、今の自分で出来る方法として、あまり良い内容ではないのですが、
    一旦、xmlnodeに取り込んで、それをDataTableに入れ直すという方法です。

    <Time>タグは必ずありますので、それをキーにしてデータを整理する といった方法で格納しました。

    ---コード-----------------------------------------------------------------------------
    private const string nodeText =
    "[name()='Time' or name()='LatitudeDegrees' " +
    "or name()='LongitudeDegrees' or name()='AltitudeMeters '" +
    "or name()='DistanceMeters' or name()='Value']";
    private XmlDocument doc;

    public DataTable GetData() {

    DialogResult ret = this.ofd.ShowDialog();
    List<string> list = new List<string>();
    List<string> time = new List<string>();

    if ( ret == DialogResult.OK ) {

    doc = new XmlDocument();
    doc.PreserveWhitespace = false;
    doc.Load( ofd.FileName );

    foreach ( XmlNode node in doc.SelectNodes( "//*[name()='Time']/text()|//@*[name()='Time']" ) ) {
    time.Add( node.Value );
    }

    foreach ( XmlNode node in doc.SelectNodes( "//*" + nodeText + "/text()|//@*" + nodeText ) ) {
    list.Add( node.Value );
    }
    }

    return GetTable( time.Count, list );
    }

    private DataTable GetTable( int number, List<string> data ) {

    DataTable dt = new DataTable( "GPS" );
    // Time, LatitudeDegrees, LongitudeDegrees, AltitudeMeters, DistanceMeters, Valueを格納
    dt.Columns.Add( "Time", typeof( String ) );
    dt.Columns.Add( "LatitudeDegrees", typeof( Double ) );
    dt.Columns.Add( "LongitudeDegrees", typeof( Double ) );
    dt.Columns.Add( "AltitudeMeters", typeof( Double ) );
    dt.Columns.Add( "DistanceMeters", typeof( Double ) );
    dt.Columns.Add( "Value", typeof( Double ) );

    int inumber = 0;

    for ( int i = 0; i < data.Count; i++ ) {
    if ( "Z" == data[ i ].Substring( data[ i ].Length - 1 ) ) {
    var row = dt.NewRow();
    if ( i + dt.Rows.Count >= data.Count ) break;

    row[0] = data[ i ];

    i++;
    for ( int j = 1; j < dt.Columns.Count; j++ ) {
    if ( "Z" != data[ i ].Substring( data[ i ].Length - 1 ) ) {
    row[ j ] = data[ i ];
    } else {
    row[ j ] = "0";
    }
    i++;
    }
    dt.Rows.Add( row );
    inumber++;
    }
    }

    return dt;

    }
    -------------こちらは2次元配列に格納する場合---------------------------------------------

    //List<string>データをString[]に格納してList<String[]>に置き換える
    //はずが、どうもList list.Add(**)とするも後ろに追加ではなく、
    //すべて書き換えになるので、しょうがないので2次元配列で対処
    //DataTableに入れた方がいいかな。
    private String[,] Change( int number, List<string> data ) {

    // Time, LatitudeDegrees, LongitudeDegrees, AltitudeMeters, DistanceMeters, Valueを格納
    int value = 6;
    string[] str = new string[ value ];

    List<String[]> list = new List<string[]>();
    String[ , ] strArray = new String[ number, value ];

    int inumber = 0;

    for ( int i = 0; i < data.Count; i++ ) {
    if ( "Z" == data[ i ].Substring( data[ i ].Length - 1 ) ) {
    if ( i + value >= data.Count ) break;

    strArray[ inumber, 0 ] = data[ i ];

    i++;
    for ( int j = 1; j < value; j++ ) {
    if ( "Z" != data[ i ].Substring( data[ i ].Length - 1 ) ) {
    strArray[ inumber, j ] = data[ i ];
    } else {
    strArray[ inumber, j ] = "0";
    }
    i++;
    }
    inumber++;
    }
    }
    return strArray;
    }
    ---------------------------------------------------------------------------------------
    次にList<String[]>に格納しようとしたのですが、バグなのでしょうか
    List.Add(**)としてループでどんどん追加したのですが、なぜか格納されたすべてのデータが、
    最後に格納したデータに書き換えられてしまいます。

    例えば、
    list.Add("1");
    list.Add("2");
    list.Add("3");
    の中身は、
    1
    2
    3
    となると思うのですが、これが
    3
    3
    3
    となってしまうのです。それがずーっと解決できなかったもので、2次配列やDataTableに格納となった次第です。
    ちなみにこちらがそのコードです。何がおかしいのでしょうか?

    // IEnumerator<string> ie = motoData.GetEnumerator();

    // while ( ie.MoveNext() ) {

    // if ( "Z" == ie.Current.Substring( ie.Current.Length - 1 ) ) {
    // //Time情報から格納開始し、Valueデータ数あればそのまま格納
    // //無ければ"0"で補完でしょうがないや。
    // str[ 0 ] = ie.Current;
    // ie.MoveNext();

    // for ( int i = 1; i < value; i++ ) {
    // if ( "Z" != ie.Current.Substring( ie.Current.Length - 1 ) ) {
    // str[ i ] = ie.Current;
    // ie.MoveNext();
    // } else {
    // for ( int j = 0; j < value; j++ ) {
    // str[ j ] = "0";
    // }
    // break;
    // }
    // }
    // list.Add( str );
    // }
    // }
    ---------------------------------------------------------------------------------
    もっと効率の良い(取り込んでから、格納までの消費メモリーや時間が短い)方法はないでしょうか。
    結構、処理に時間がかかります。
記事No.44415 のレス /過去ログ76より / 関連記事表示
削除チェック/

■44808  Re[5]: 色の合成
□投稿者/ ぽん -(2009/12/18(Fri) 09:47:25)
    皆さん回答ありがとうございます
    
    減算ということで
    白の用紙と黄色の用紙の色の差分をとって
    画像から算出した差を引いてみました。
    
    差分の色 = RGB(255,255,255) - RGB(255,255,0)
    
    変換された色 = 画像の色 - 差分の色(0,0,255)
    
    
    この様にすると画像から青の成分がすべて消えてしまいました^^;
    まぁ、青の成分255を引いてるから当たり前ですね
    
    
    
    > ちょっと追加
    > >理屈的には地の髪の色の補色を減算ですかね?
    > って書きましたが、計算の意味としては正確には地の色の明るさを乗算ですかね…
    > ※今回のように255か0かなら同じ結果になりますが。
    > 
    > 本来の色*地の色/255
    > かな。
    
    なるほど、単純に引くだけじゃ駄目なんですね
    
    一応完成したのでソースをUPしておきます。
    GetPixelとSetPixelは遅いので実際はunsafeを利用したものに
    置き換えています。
    
    -----------------------------------------------------------
    
            Bitmap _drawImage = new Bitmap(800, 600);
            Point _drawImagePoint = new Point();
    
            private void panel1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawImage(_drawImage, _drawImagePoint);
            }
    
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                Bitmap targetBmp = new Bitmap("テスト画像.png");
                Color targetColor = Color.Empty; //画像から取得した色
                Color setColor = Color.Empty;    //新しくセットする色
                Color backColor = Color.FromArgb(255, 255, 0); ;  //背景の色(用紙)
                float roundValue = 0.5f;//四捨五入の補正用
    
                Graphics g = Graphics.FromImage(_drawImage);
                g.Clear(backColor);
    
    
                int red, blue, green;
    
                for (int x = 0; x < targetBmp.Width; x++)
                {
                    for (int y = 0; y < targetBmp.Height; y++)
                    {
                        targetColor = targetBmp.GetPixel(x, y);
    
                        red = (int)(targetColor.R * backColor.R / 255 + roundValue);
                        green = (int)(targetColor.G * backColor.G / 255 + roundValue);
                        blue = (int)(targetColor.B * backColor.B / 255 + roundValue);
    
                        setColor = Color.FromArgb(red, green, blue);
    
                        targetBmp.SetPixel(x, y, setColor);
                    }
                }
    
                g.DrawImage(targetBmp, _drawImagePoint);
                g.Dispose();
    
                panel1.Refresh();
    
            }
    
記事No.44767 のレス / END /過去ログ76より / 関連記事表示
削除チェック/

■44848  Re[1]: c#でINIファイルの全セクションを取得
□投稿者/ 魔界の仮面弁士 -(2009/12/21(Mon) 16:06:19)
    No44846 (たろ さん) に返信
    > セクション名を指定して情報を取得する処理は、
    > [DllImport("kernel32")]
    > private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
    > を使用して実現できているのですが、
    > セクション名だけを取得する処理がわかりません。。
    
    GetPrivateProfileString API だけでいけますよ。
    http://msdn.microsoft.com/ja-jp/library/cc429779.aspx
    
    // C#
    [DllImport("kernel32", CharSet = CharSet.Auto)]
    private static extern int GetPrivateProfileString(
        string section,
        string key,
        string def,
        char[] retVal,
        int size,
        string filePath);
    
    static void Main(string[] args)
    {
        char[] buf = new char[1024];
        int ret = GetPrivateProfileString(null, null, null, buf, buf.Length, "odbc.ini");
        string sectionsText = new string(buf, 0, ret);
        string[] sections = sectionsText.TrimEnd('\0').Split('\0');
    
        // 内容確認
        Array.ForEach(sections, Console.WriteLine);
    }
    
    '-----------------------------------------
    
    ' Visual Basic
    Declare Auto Function GetPrivateProfileString Lib "kernel32" _
        (ByVal section As String, _
         ByVal key As String, _
         ByVal def As String, _
         <Out(), MarshalAs(UnmanagedType.LPTStr)> ByVal buf As String, _
         ByVal size As Integer, _
         ByVal file As String) As Integer
    
    Sub Main()
        Dim buf As String = StrDup(1024, vbNullChar)
        Dim ret As Integer = GetPrivateProfileString(Nothing, Nothing, Nothing, buf, buf.Length, "odbc.ini")
        Dim sections() As String = Left(buf, ret).TrimEnd(vbNullChar).Split(vbNullChar)
    
        '内容確認
        Array.ForEach(sections, AddressOf Console.WriteLine)
    End Sub
記事No.44846 のレス /過去ログ76より / 関連記事表示
削除チェック/

■44858  Re[2]: c#でINIファイルの全セクションを取得
□投稿者/ たろ -(2009/12/22(Tue) 11:23:50)
    ご返信ありがとうございます!


    GetPrivateProfileStringByByteArray関数を使用して取得する事ができました!


    [DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileStringA")]
    public static extern uint
    GetPrivateProfileStringByByteArray(string lpAppName,
    string lpKeyName, string lpDefault,
    byte[] lpReturnedString, uint nSize,
    string lpFileName);


    ArrayList aryRet = new ArrayList();
    // 指定ファイルのセクションの一覧を得る
    byte[] ar2 = new byte[1024];
    uint resultSize2 = GetPrivateProfileStringByByteArray(null, null, "WEB01", ar2, (uint)ar2.Length, m_iniFilePath);

    string result2 = Encoding.Default.GetString(ar2, 0, (int)resultSize2 - 1);
    string[] sections = result2.Split('\0');
    string val_tmp = "";
    foreach (string section in sections)
    {
    }

    なるほど!
    GetPrivateProfileString関数でもできたんですね!
    勉強になります!

    ありがとございました!


    No44848 (魔界の仮面弁士 さん) に返信
    > ■No44846 (たろ さん) に返信
    >>セクション名を指定して情報を取得する処理は、
    >>[DllImport("kernel32")]
    >>private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
    >>を使用して実現できているのですが、
    >>セクション名だけを取得する処理がわかりません。。
    >
    > GetPrivateProfileString API だけでいけますよ。
    > http://msdn.microsoft.com/ja-jp/library/cc429779.aspx
    >
    > // C#
    > [DllImport("kernel32", CharSet = CharSet.Auto)]
    > private static extern int GetPrivateProfileString(
    > string section,
    > string key,
    > string def,
    > char[] retVal,
    > int size,
    > string filePath);
    >
    > static void Main(string[] args)
    > {
    > char[] buf = new char[1024];
    > int ret = GetPrivateProfileString(null, null, null, buf, buf.Length, "odbc.ini");
    > string sectionsText = new string(buf, 0, ret);
    > string[] sections = sectionsText.TrimEnd('\0').Split('\0');
    >
    > // 内容確認
    > Array.ForEach(sections, Console.WriteLine);
    > }
    >
    > '-----------------------------------------
    >
    > ' Visual Basic
    > Declare Auto Function GetPrivateProfileString Lib "kernel32" _
    > (ByVal section As String, _
    > ByVal key As String, _
    > ByVal def As String, _
    > <Out(), MarshalAs(UnmanagedType.LPTStr)> ByVal buf As String, _
    > ByVal size As Integer, _
    > ByVal file As String) As Integer
    >
    > Sub Main()
    > Dim buf As String = StrDup(1024, vbNullChar)
    > Dim ret As Integer = GetPrivateProfileString(Nothing, Nothing, Nothing, buf, buf.Length, "odbc.ini")
    > Dim sections() As String = Left(buf, ret).TrimEnd(vbNullChar).Split(vbNullChar)
    >
    > '内容確認
    > Array.ForEach(sections, AddressOf Console.WriteLine)
    > End Sub
記事No.44846 のレス /過去ログ76より / 関連記事表示
削除チェック/

次の20件>

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

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

パスワード/

- Child Tree -