カテゴリー「C#」の11件の記事

2008年12月11日 (木)

LINQ to XMLで苦戦中(解決)

苦戦していたLINQなんですが、SAMEさんからのヒントにより
うまくGridViewに表示する事が出来ました。

SAMEさんのソースでは一旦DataTableにセットしなおしてから
GridViewにバインドしているようでしたが、どうやら、直撃でバインドしても
うまく表示できるようですね。
(おそらく、今貼っているソースにはGridViewのプロパティ設定などを載せていないから
わざとDataTableに入れてからバインドさせていると勝手に推測)

C#の場合は(?)一旦内部の要素に値をセットすると言う事が必要なんですね!


using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string strFilePath = Server.MapPath("./");
XElement xmldoc = XElement.Load(strFilePath + "App_Data/udons_2008_forControl.xml");

var query = from c in xmldoc.Elements("商品")
select new
{
品番 = c.Element("品番").Value,
品名 = c.Element("品名").Value,
地方発送 = c.Attribute("地方発送").Value,
イメージ = c.Element("品名").Attribute("イメージ").Value,
セット内容 = c.Element("セット内容").Value,
セット = c.Element("セット内容").Attribute("セット").Value,
単価 = c.Element("セット内容").Attribute("単価").Value,
価格 = c.Element("価格").Value
};

GridView1.DataSource = query;
GridView1.DataBind();
}
}

| | コメント (0) | トラックバック (0)

2008年12月10日 (水)

LINQ to XMLで苦戦中…。

以下のXMLをDataGridにバインドして表示するWebプログラムをC#で組もうとしたら・・・。


<商品情報>
<商品 地方発送="なし">
<品番>udon_01
<品名 イメージ="tenpura.gif">天ぷらうどん
<セット内容 セット="5" 単価="700">うどん、かけつゆ、えび天ぷら、あげ巻き
<価格>3500

<商品 地方発送="なし">
<品番>udon_02
<品名 イメージ="kakiage.gif">かきあげうどん
<セット内容 セット="5" 単価="560">うどん、かけつゆ、季節のかきあげ、かまぼこ
<価格>2800

<商品 地方発送="あり">
<品番>udon_03
<品名 イメージ="kitsune.gif">きつねうどん
<セット内容 セット="4" 単価="375">うどん、かけつゆ、味付け油あげ、かまぼこ
<価格>1500

<商品 地方発送="なし">
<品番>udon_04
<品名 イメージ="tsukimi.gif">月見うどん
<セット内容 セット="4" 単価="150">うどん、かけつゆ、生卵
<価格>600

<商品 地方発送="あり">
<品番>udon_05
<品名 イメージ="kakeudon.gif">かけうどん
<セット内容 セット="6" 単価="250">うどん、ぶっかけつゆ、あげ巻き、乾燥薬味
<価格>1500

<商品 地方発送="あり">
<品番>udon_06
<品名 イメージ="wakame.gif">わかめうどん
<セット内容 セット="10" 単価="250">うどん、かけつゆ、乾燥わかめ、かまぼこ
<価格>2500

<商品 地方発送="あり">
<品番>udon_07
<品名 イメージ="sansai.gif">山菜うどん
<セット内容 セット="10" 単価="250">うどん、かけつゆ、しいたけ、しめじ、山菜、かまぼこ
<価格>2500

<商品 地方発送="なし">
<品番>udon_08
<品名 イメージ="nikomi.gif">煮込みうどん
<セット内容 セット="7" 単価="400">うどん、かけつゆ、しめじ、きじ肉、ほうれんそう、あげ巻き
<価格>2800

<商品 地方発送="なし">
<品番>udon_09
<品名 イメージ="misonikomi.gif">味噌煮込みうどん
<セット内容 セット="7" 単価="400">うどん、いりこだし、麦みそ、じゃこ天、ごぼう天、きじ肉、かぼちゃ、乾燥ねぎ
<価格>2800

<商品 地方発送="なし">
<品番>udon_10
<品名 イメージ="curry.gif">カレーうどん
<セット内容 セット="5" 単価="600">うどん、かけつゆ、粉末カレー、きじ肉、野菜
<価格>3000


以下のプログラムでそのままバインドできると思ったら、
LINQでデータを取るところで「匿名型では、同じ名前を持つ複数のプロパティを含む事はできません。」
とコンパイルエラーになってしまいました。
protected void Page_Load(object sender, EventArgs e)
{
string strFilePath = Server.MapPath("./");
XElement xmldoc = XElement.Load(strFilePath + "App_Data/udons_2008_forControl.xml");

var query = from c in xmldoc.Elements("商品")
select new
{
c.Element("品番").Value,
c.Element("品名").Value,
c.Attribute("地方発送").Value,
c.Element("品名").Attribute("イメージ").Value,
c.Element("セット内容").Value,
c.Element("セット内容").Attribute("セット").Value,
c.Element("セット内容").Attribute("単価").Value,
c.Element("価格").Value
};

GridView1.DataSource = query;
GridView1.DataBind();
}

VB.NETの場合はc.Element("XXX")の部分をc.<品番>.Valueで取得できるみたいなのですが、
C#に翻訳しようと思うと何か足りないのだろうか…。

タイムオーバーになったのでまた明日以降ということで。。。

| | コメント (2) | トラックバック (1)

2008年6月 5日 (木)

またもやコントロールに悩まされています

まずはDataGridView。

あるデータをDataTableにいれて、それをDataSourceプロパティに代入。
再度別のデータで同じく代入すると、NullReferrenceExceptionが発生。
でも数秒後に同じ事をしても問題ない。。。

何なの?この数秒は。

次にListView。

リストのデータが少ない状態では、データが無いところをクリックすると
選択されていない状態になる。(MultiSelect=falseなので単一選択で動作)
そうなった時に選択行を一番下のアイテムに選択させようと以下の事をする。
listview.Items[linemax].Selected = true;
listview.Items[linemax].Focused = true;

すると一番下の行が選択されたように見えるが、
SelectedItemsプロパティには1つも入っていないので選択されていないことに
なってしまう。

今日は仕組みを変えるか、原因を発見するのか…。
原因は何なんだか。

| | コメント (0) | トラックバック (0)

2008年4月10日 (木)

Socketでタイムアウト検知を調査中…

今、仕事の関係でSocketのタイムアウトを検知する必要があるのですが、
Connect、Send、ReceiveについてはPoll()などで検知可能なようですが、

昔の仕様だからなのか、ShutdownとCloseの間で「サーバ側が切断した」事を
検知しなければなりません。(細かく言うとサーバからFINが送信された事)

で、切断した事を検知するのは非常に簡単です。
最悪「受信データが0バイト」だった時に相手が切断したと言う事にすればいいわけです。

C++のSocketだとイベント待ちをするなどすればCloseのタイミングがつかめますが
(FD_CLOSEを捕まえる)
C#で同等の事が出来ないのだろうか…。

| | コメント (0) | トラックバック (0)

2008年3月29日 (土)

次の業務はソケット通信

次の業務はまだ未定という状態ですが、技術的な面では「ソケット通信」という可能性が非常に強くなってきました。

今日もacceptで待ち受けるサーバ側サンプルアプリを作成しましたが、
以前に設計して教えてもらっていたノウハウをほぼ忘れている始末。。。

少しこの週末でC#2008か何かでソケット通信のプログラムを抑えておく必要が
ありそうです。

ブロッキング、ノンブロッキングについてもはちゃめちゃでした。
(1対1の通信から1対Nに変換する時にブロッキングモードのままで通信するつもりが
いつの間にかノンブロッキングのプログラムになっていました。)

何とか本日中には通信するようにはなりましたが、来週の月曜日は休みなので
また火曜日から再開することにして。。。

最近は特殊なプログラムが多いなと思った瞬間でありました…。

| | コメント (0) | トラックバック (0)

2008年2月23日 (土)

Visual Studio 2008をインストールしました。

Visual Studio 2008 Express Editionをインストールしてみました。

ただ、インストールしただけで何もしていませんが:-P

明日は1日プログラム漬けになろうと思っているので、少し使い勝手を見てみようと思います。

色々とインターネット上を見ていると、Visual Studio 2005→Visual Studio 2008になる時に
使い勝手などが変わっているようですね。


| | コメント (0) | トラックバック (0)

2007年11月 1日 (木)

C#で画像処理

今、新しい業務で画像を扱うようになったわけですが、
結構苦戦しています。

今回取り扱っている画像はTIFF画像でそこから部分的に切り抜いて保存するという
処理を作成しました。

どうやるかと言うと…。

byte[] bData = File.ReadAllBytes(TIFF画像ファイルパス);
MemoryStream mstream = new MemoryStream(bData, TIFFのヘッダ長, bData.Length - TIFFのデータ長);

Bitmap bitmap = new Bitmap(mstream);

で、bitmapをそのままPictureBox.Imageに表示させれば表示できたような気がします。

TIFF画像なんて大学時代の研究以来で、だいぶ忘れてしまっているなと
感じさせられました。

| | コメント (0) | トラックバック (0)

2007年8月17日 (金)

DataGridViewに苦戦しています。

昨日、開発したソフトの不具合で、DataGridViewの挙動を修正しようとしていたのですが、
(どんな不具合かと言うと、画面を開いたタイミングでDataGridViewに入力テキストボックスを
表示させて入力状態になるはずが、←キーを押していると、
入力不可カラムにフォーカスが移動し、テキストボックス内でカーソルが移動しない。)

DataGridViewを編集モードにしようとするとF2キーを押すかSendKeys.Send()で
キーを飛ばすかしなければいけないのですが、画面表示直後のShownイベントで
SendKeysをすると、何もしなければ大丈夫ですが、
←キーを連打してたりするとキーが飛んでしまうようですね。

一度、キーが飛んでしまうと復活させる事ができないと言う状態で…。

結局、ギブアップしてしまいました。

ちなみに、BeginEdit()、EditModeについては試しましたが、DataGridViewが
ReadOnlyになっているのでBeginEdit()は使えず、(実行しても失敗する)
EditModeも動きが思ったものにならなかったように思います。

やっぱり現状が限界なのかな…?

| | コメント (0) | トラックバック (0)

2007年8月 1日 (水)

引き続きカスタムコントロールについて調べてみました。

カスタムコントロールを作成するにあたって参考となりそうな書籍、
サイトを探してみました。

検索するといろいろ見つかるものですね。(中身は流し読みよりも荒く読み漁ってますが…例えば…。

C#で作成する方法について書かれている書籍です。

C#によるコンポーネントプログラミング

バージョンもなんとなく古そうですが、ちょこっと目を通したくなりました。
あとはリンクなんですが、思ったより多いですね。
「C# カスタムコントロール」で検索かけるとたくさん出てきました。
なんとなく、リンクを紹介するよりは、検索ワードを紹介する方がよさそうなくらいですね。

| | コメント (0) | トラックバック (0)

2007年7月31日 (火)

コントロールの作り方

今の業務でお手製の画面コントロールを作成して使用しているのですが、
どうもうまく挙動がつかめませんね。

中身はどんなものかというと、DataGridViewでフォーカスがあたったところに
テキストボックスを表示するようなコントロールなわけですが、
フォーカスの制御とか難しいですね。

矢印キーを押すとTextBoxの中でカーソルが動いて欲しいのにDataGridViewの
セルが移動したり。

表示されているTextBoxがイベントを先に受け取ってDataGridViewのイベントを
乗っ取ってしまうか、その反対かの違いなのですが、毎回同じようには動いてくれない
ようですね。(まあ、中身のつくりもわけわからない状態なんですけどね…。
仕様の詰め込みすぎというか、なんと言うか…)

実際世の中ではどうやってお手製コントロールを作っているのだろうか。
VB.NETとかC#.NETとかだとGrapeCity が有名だと思いますが、

あそこの製品は基本機能にちょっとだけ(?)機能を加えているような感じがします。
(そんなに使ったこと無いので適当なことを言っていますが)
でも、結構有用な機能が実装されていますよね。

と、コントロールに関する不具合に悩まされています…。

| | コメント (0) | トラックバック (0)

より以前の記事一覧