ClickOnce配布時のエラー

2009-07-28
このエントリーをはてなブックマークに追加

URLDownloadToCacheFile failed with HRESULT ‘-2146697202’

ClickOnceで配布したアプリケーションを起動しようとすると起動にコケました。エラーログを辿ると上記のログが。エラーからググったんですけど、どうにもわかんなかったんですね。

で、思い当たったのが第三者機関が証明書を発行していないオレオレ証明書。

これがビンゴだったわけですよ。社内でしか使わないアプリケーションなので証明書にコストも掛けられず、かといってプレーンな状態でデータのやり取りもしたくなく、オレオレ証明書を使っていたわけですが、それがよくなかった様子。証明書のインポートをしたら無事に起動しました。

 

Tags:

C#でXMLからLINQtoXMLで必要な情報だけ抜き出してDataGridViewにバインドする

2009-07-09
このエントリーをはてなブックマークに追加

最近RubyonRailsのエントリーばっかりだったのですが、別にそれしかやっていないわけではありません。プロジェクトも並行で同時進行、言語もまちまち。なんとか混乱しないでこなしていますが、堤防決壊寸前ですな。

XDocument doc = XDocument.Parse(XMLの形をした文字列);
var query = from n in doc.Descendants(“user”)
        select new {
            id = n.Element(“id”).Value,
            user_name = n.Element(“user_name”).Value,
            telephone = n.Element(“telephone”).Value
        };

データグリッド.DataSource = query.ToList();

XMLファイルをXDocumentに読み込む場合は

XDocument.Load(ファイルパス);

となります。

LINQtoXMLで必要なノードだけを抽出して(今回は「user」というノードだけを抜き出しています)、データグリッドにバインドしています。

バインドするのはLINQの結果のままの状態ではなく、IListに明示的に変換してあげなければいけません。変換してやら無いとIEnumerableのままなのかな?バインドしてもデータグリッドに何も表示されませんでした。

コレを解決するのに半日悩んだ。。。

Tags: , ,

C#で桁埋め(ゼロパディング)

2008-11-07
このエントリーをはてなブックマークに追加

Console.WriteLine( String.Format(“{0:D2}”,3) );

出力結果は「03」です。Dで10進数と指定、2で2桁にパディング、最後の3が「これをパディングしてくださ」っていう感じです。

Console.WriteLine(String.Format(“{0,4}”,3) );

だと、「   3」と出力されます。4桁にスペースパディングです。固定長出力時に利用します。でも固定長っていまでも使うのかなぁ。

Tags:

C#で四捨五入

2008-09-08
このエントリーをはてなブックマークに追加

2.0以降専用です。

Math.Round(対象数字,0,MidpointRounding.AwayFromZero);

二つ目の引数は、「第何位まで求めるか」です。上記例だと0なので整数値にしてくれます。1.1では四捨五入はなかったので、自作した覚えがあります。

便利になったもんですね。

三つ目の引数を「MidpointRounding.ToEven」にすると丸めてくれます。これは普通に「Math.Round」でもいいと思うので、四捨五入用と思ってもいいのかもしれません。

Tags:

C#で文字列が整数値か判定する

2008-02-11
このエントリーをはてなブックマークに追加

Parseしてcatchするかどうかの判定でもいいのですが、いまいちスマートじゃないなぁと。

そしたら2.0からTryParseなるメソッドが追加されていました。
いやー、不勉強ここにいたるという感じですな。

int intReturn;
Console.WriteLine (int.TryParse(“hoge”,out intReturn));

上記例だとFalseが出力されます。

第一引数”hoge”が整数か否かを判定して、「ちげーよ」っていう結果が出てるんですよね。整数だったらTrueが返ります。boolです。

また、Falseの場合にはintReturnに「0(ゼロ)」がセットされます。Falseの0なんですけど、何に使うのかがわかりませんでした。せめて初期値を指定できて、Falseならその値が返ってくれればいいのですが、一行目を

int intReturn = 1234;

としておいても、0が返ります。

 

Tags:

C#で日付をフォーマット指定して文字列にする

2008-01-05
このエントリーをはてなブックマークに追加

String.Format(“{0:yyyyMMdd}”,DateTime.Now)

まぁこれだけの話なのですが、しょっちゅう書き方忘れるので備忘録に。

Tags:

C#でコンボボックスのSelectedIndexを値から指定する

2008-01-04
このエントリーをはてなブックマークに追加

string[] strMonth = { “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “10”, “11”, “12”,};
cmbMonth.Items.AddRange(strMonth);
cmbMonth.SelectedIndex = cmbMonth.FindString(DateTime.Now.Month.ToString());

 

例として、cmbMonthというコンボボックスに1月から12月までの値を入れています。そして、今月をSelectedIndexに指定しています。FindStringメソッドで当月が格納されているitemindexを求めて、それをselectedindexに指定しているだけ。

これって2.0からでしょうね。確か1.1のころはこんな便利なメソッドはなかった。

Tags:

C#でPDF

2007-12-31
このエントリーをはてなブックマークに追加

最近帳票出力が必要なWindowsアプリケーションの開発をやっています。帳票はPDF。ActiveReportとかを買うお金はありません。ということで、iText.NET

 

フリーなのにとってもよくできているのですが、いまいち思ったとおりに動いてくれない。まぁこれは僕のセンスの問題なのですが。。。

 

もうちょっとしたらTipsをまとめて書けそう。忘れないうちに書かないと。。。

Tags: , ,

DataGridViewのフォントサイズの変更

2007-07-06
このエントリーをはてなブックマークに追加

プロパティウィンドウにフォントサイズなる項目がなかったような気がして不安になったのですが、コードから指定したら簡単にできてしまいました。

DataGridViewの名称.Font = new Font(DataGridViewの名称.Font.Name, 22);

これでデフォルトフォントのままでサイズだけが22になります。
でも、カラムのheightも合わせて指定しないと悲しいことになります。勝手に拡大してくれたら幸せになれたのに。。。

Tags:

C#でベーシック認証が必要なページのデータを取得する方法

2007-06-08
このエントリーをはてなブックマークに追加

//もしかすると名前空間足りないかも

using System.Text;
using System.IO;
using System.Net;
using System.Web;
using System.Collections;

//相手のCGIはeuc-jpで書かれています。
Encoding encEuc = Encoding.GetEncoding(“euc-jp”);

//POSTするデータの作成、URLエンコードが必要です。
byte[] data = Encoding.ASCII.GetBytes(“data=” + HttpUtility.UrlEncode(“C#からベーシック認証の向こうにPOSTしてみました。”, encEuc));

//WebRequestの作成
HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create(CGIのURL);

//POSTでURLエンコードされたデータを送信しますという宣言
webreq.Method = “POST”;
webreq.ContentType = “application/x-www-form-urlencoded”;

//ベーシック認証使うよ宣言と、次にアカウントとパスワード
webreq.PreAuthenticate = true;
NetworkCredential network = new NetworkCredential(アカウント,パスワード);
webreq.Credentials = network;

//何バイト送るよ
webreq.ContentLength = data.Length;

//送信ストリーム
Stream webreq_stream = webreq.GetRequestStream();
webreq_stream.Write(data, 0, data.Length);
webreq_stream.Close();

//受信ストリーム
WebResponse webres = webreq.GetResponse();
Stream webres_stream = webres.GetResponseStream();

//受信ストリームの読み込みと、クローズ
StreamReader stream = new StreamReader(webres_stream, encEuc);
string strGetData = stream.ReadToEnd();
stream.Close();
webreq_stream.Close();

//受信したら書き出そう
System.Console.Write(strGetData);

Webサービス使えない状況だとやっぱりCGI経由になるわけですが、大事なデータはやっぱりベーシック認証なんかで守られてるわけですよ。しかもGETでクエリつけたらログに残っちゃいますしね。

というわけで、上記の手法を探っておりました。

Tags: