転職用の日記だったのですが趣味でExtJsを使用して遊んでます。 いろいろと作業期間があく為、そのための備忘録ブログです。記事内容等で問題等があっても責任は取りません。とうとう趣味プログラマになりました。
2008年3月23日日曜日
2008年3月19日水曜日
ExtJs-9 DBとメニューとその2
この時間からの作業は明日に響きます。5時半起床だし。
8で書いてたつりーからタブをこうちくするってのは
APIリファレンスそのものだ。
よき勉強のため、APIリファレンス少し分解して
理解してから組みなおそう。
これができたらあとは
コントロールからのデータ取得(JSONになるんだろうなぁ)と
ASPX側への受け渡し。
DBへの書き込みと部分の実装の順番。
Ext側の小細工は仕組みの骨組みができた後に少しづつ
コントロールの勉強をしよう。
そしたらあとはフォーム系のコントロールをならしてみよう。
先が長いですね。
2008年3月18日火曜日
本を。
なんて予定は未定で気が付けばITILの入門書を。ISO90012700120000なんでもPDCAだ。
なんだか世の中全てそのサイクルな気分。
もうPDCA中毒。
ぱっとおもいついて
できそうだからとかじりつき
ちょっとむずかしいと
あきらめる。
そんなサイクル。
にはしたくない。
2008年3月17日月曜日
さて、バスまち。と本。
朝、新聞と週刊誌。
兄に借りた本を持ち歩けばよかったと後悔。
会社の先輩になにかないかと催促。
チームハックという本を借りた。
帰りの電車で三分の二読んだ。
おもしろい。
会社帰りに読むのは絵と文字数のバランス
が重要。
疲労した頭でぎっちりした文字を速読すると熱くなってしまうから。
先日脳学者の茂木さん?が読書について新聞に書いていた。
自分の分野以外の本を。と。
あとソニーの有機ELの宣伝で
脳は補完すると。
プロフェッショナルにももぎさん。
よく会う。
分類してみた。最近だと
ASP.NET本。2003の2〜4と、2005をローテーション。この人の書き方はさくさくしててスキだ。
自己啓発系。
時間の使い方云々と兄が貸してくれた本。
父に借りた判断速度の研究なんつー本も。
時代小説。ふじさわしゅうへい読破だとさわいでたけど停滞気味。
新分野。
今度は経理ダ。簿記だ。入門だ。
サンキューからやろう。
明日買おう。
バスまってると暗くて本よめないし。
困る。
あ、来た。
ExtJs-8 DBとメニューと
本実装を開始しようかと思っています。。
何を作ろうか。というか、決まってる。
自分用のデスクトップツールを作ろう。
じゃ、メニューを作ろう。
ExtはloderでdataURL指定できるので
UIはすべてExtでやろうと決めた。
メニュー用のツリーを作ろう。
設定可能にするため、ツリー構造もDBに定義してみよう。

とりあえずこんなんでよいだろう。
あとは最上位情報から取得と
末尾を検索する再帰関数を作ってノードを作ればOK。
いっこはまったのはJSONの値を整形する際の文法。
何を書いてやればOKなん?
っていうのがわからんチン。
とりあえず現状の解決としては、
子供要素はChild[]でくくれ。
ということでしょうか。
本日作ったサンプルコード張ってみる。


/// <summary> /// メニューツリーの構築 /// </summary> /// <returns></returns> private string createTrees() { string result = ""; string node = ""; string nodes = ""; string sqlStatement = ""; sqlStatement = "select * from TM_メニューデータ WHERE 上位メニューコード = '-' AND 末尾フラグ = 'false' ORDER BY 表示順, メニューコード"; DataTable dt = _sqlClientAccess.ReadDataTable(sqlStatement, "TM_メニューデータ"); foreach (DataRow dr in dt.Rows) { //--- JSONノード化 --- node = createJsonMenuNode(dr, dt.Columns); if (Convert.ToBoolean(dr["末尾フラグ"]) == true) { // NOP } else { node += ",children:["; //--- 末尾情報検索再帰関数呼び出し --- node += searchLeafData(dr["メニューコード"].ToString()); node += "]"; } nodes += addNodeSeparator(node, "{", "},"); } nodes = trimEndToken(nodes, ","); nodes = addNodeSeparator(nodes, "[", "]"); result = nodes; return result; } /// <summary> /// メニューツリー構築用再帰関数 /// </summary> /// <param name="parentCode"></param> /// <returns></returns> private string searchLeafData(string parentCode) { string result = ""; string nodes = ""; string node = ""; string sqlStatement = ""; sqlStatement = "select * from TM_メニューデータ WHERE 上位メニューコード = '" + parentCode + "'"; sqlStatement += " ORDER BY 表示順"; DataTable dt_children = _sqlClientAccess.ReadDataTable(sqlStatement, "TM_メニューデータ_CHILD"); foreach (DataRow dr in dt_children.Rows) { //--- JSONノード化 --- node = createJsonMenuNode(dr, dt_children.Columns); if (Convert.ToBoolean(dr["末尾フラグ"]) == true) { // NOP } else { node += ",children:["; //--- 再帰呼び出し --- node += searchLeafData(dr["メニューコード"].ToString()); node += "]"; } nodes += addNodeSeparator(node, "{", "},"); } nodes = trimEndToken(nodes, ","); result = nodes; return result; }
private static string createJsonMenuNode(DataRow dr, DataColumnCollection dcCollenction) { string result = ""; //--- 初期化 --- string nodeinfo = ""; foreach (DataColumn dc in dcCollenction) { switch (dc.ToString()) { case "メニューコード": nodeinfo = nodeinfo + "id:" + "'menu_" + dr[dc] + "'" + ","; break; case "項目名": nodeinfo = nodeinfo + "text:" + "'" + dr[dc] + "'" + ","; break; case "末尾フラグ": nodeinfo = nodeinfo + "leaf:" + dr[dc] + ","; break; case "ドラッグ設定": nodeinfo = nodeinfo + "draggable:" + dr[dc] + ","; break; } } //--- 末尾カンマ排除 --- if (nodeinfo.EndsWith(",")) { nodeinfo = nodeinfo.Substring(0, nodeinfo.Length - 1); } //--- 終期化 --- result = nodeinfo; return result; }
private static string addNodeSeparator(string node, string start_token, string end_token) { node = node.Insert(0, start_token); node = node.Insert(node.Length, end_token); return node; }
private static string trimEndToken(string token, string trinToken) { //--- 末尾カンマ排除 --- if (token.EndsWith(trinToken)) { token = token.Substring(0, token.Length - 1); } return token; }
さて、このツリーからクリックされたら指定URIをタブを追加して
表示するというのはまた今度。
今日得たこと。
①ASP.NET側でのDBアクセスモジュール
②ExtからLoader指定でaspx指定し、DBデータを取得できていること。
①、②でDataSet→JSONはすでにあるし、
Gridのサンプルはあるのでこれで少しはさきにすすめるかな。
まずまずの進捗だね。
あ。もうひとつ。せっかく作ったJSONデータ、aspxからResponse.Writeしてるのに
なんでひょうじされんのじゃ。
ってはまった。
Response.End()してないでやんの。
子一時間、右往左往してました。
はぁ。
2008年3月3日月曜日
ひさびさの更新
39度の熱を出して病院へ。
採血して、レントゲンとって。
すごーく大事になりました。
が、やっとかいふくでしょうか??
問題が。
転職して間もない=有給がない。
ということで休日出勤で進捗ともどもカバーする予定ですが、
この風邪、長い。
今日も出社予定でしたが、やめました。
ということで久々の勉強を。
文書のテンプレートの整理とEXTの学習。今日はツリーとDB系。
node + ejs + Socket.io のサンプル
まずい。。 一年間、一回も更新してない!!! つまり、、 趣味の時間がほぼ皆無ということの現れです。 業務と子育てに追われた一年でしたね。。。。。 危なく年をこすところだった。あぶない。なぶあい。 話を変えて。 今月初旬に 社内でちょっとしたプレゼンをする事に...
-
あと一時間で起きる時間。 ねるべきか、 おきてそのまま出社するべきか。 微妙にねむくないんだよなぁ。。
-
BanchaとBanchaScaffoldを利用した簡単なCRUD実装のまとめ この記事は、 Sencha Advent Calendar 2012 の7日目の記事です。 皆さんも是非、是非、参加してください。後半、まだまだ参加枠ありますよ!!そこのあなた!! ...
-
grindのIDPropertyにあわせて formのも実装すると'id'っていうnameのコントロールを設置することになるけーすがあり、 サーバサイドで受け取るとき、必然的に reqid = Request.Form["id"]; ...