【ASPNET】ASP.NET VB GridViewのヘッダーに行を追加する

今回は以前に試したGridViewのヘッダー行を1行追加するプログラムの備忘録です。
ヘッダー行を複数行にするとPostBackを行った時に、データバウンドでおかしなことになるのですが、それが避けられるケースで有れば有効かと思います。
私はこの方法を使ったことは無いのですが、将来使うかもしれないし、試していないのですがPDFファイルとGridViewから作成するのに使えるのかな?と思っています。

下の例では、行にデータを張り付けたタイミングで追加しています。
この他にもレンダリングの前でも全てのデータ張付け後でも可能と思います。

Private Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound

If e.Row.RowType = DataControlRowType.Header Then
  Dim row As GridViewRow = New GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal)
  For i As Integer = 0 To 11
    Dim cell1 As TableCell = New TableCell()
    cell1.Text = i.tostring + "月"
    row.Cells.Add(cell1)
  Next
  row.RowType = DataControlRowType.Header
  Me.GridView1.Controls(0).Controls.AddAt(1, row)
endif

プログラムは簡単で、GridViewのRowを定義して、その中にCellを追加し、GridViewにRowを追加するだけです。

尚、追加した行をDataControlRowType.Headerとしているのですが、PostBackして再度データを張り付ける時に、追加したヘッダー行にデータを張り付けようとする動きになりました。
どうしてそのような挙動になるか理由は不明です。
ですから、PostBackするような場合は注意が必要です。

以上、VB.NETでGridViewにヘッダー行を追加するシステム開発備忘録でした。

ps.
PostBack時の不具合の原因ですが、他の調査をしていてわかったかもしれませんので、リンクを貼っておきます。
ASP.NET VB GridViewのヘッダーに行を追加する(修正版)

【SQLServer】Windows10 SQL Server2014 外部接続 ファイアウォール設定

今日は、設定の備忘録です。
最近最近ノートPCに、Windows 10、Visual Studio 2015とSQL Server 2014をインストールして、出先でデモとか仕様確認をする際に開発中のアプリを動かして使用しています。

で、出先でデータスキーマを触ってしまうことも有って、開発マシンからノートPCのSQL Serverにアクセスしたくなることも多くて。。。
今回はそのWindows10上のSQL Server 2014に外部から接続する設定を書いておこうかと。まぁ、設定自体は今までと変わりないのですが、最近ブログを書く機会も少ないので^^;書いておこうかと。。。^^;;;

まずは、SQL Server Configuration Manager (SQL Server 構成マネージャー)を立ち上げます。
これって、SQL Server 2012と違ってまたスタートメニューから起動できるようになりましたね。ちょっと便利になって嬉しいです。

で、名前付きパイプかTCP/IP使う方を有効にします。私は面倒なので両方とも有効にしちゃいます。
ちなみにTCP/IPの既定のポート番号は1433ですが、ここをセキュリティの為に変更する人はここに見に来ませんよね?変える時はちょっと注意が必要なので。。。

で、次はfirewallに穴を空けてSQL Serverの通信が通るようにしてあげます。
windows 10 で穴を空けるのは初めてなので、画面のキャプチャーを12枚も撮ってしまいました。。。

SQLServerFireWallSetting01まずはWindows 10の設定画面を立ち上げます。

イーサネットをクリックして、更にWindowsファイアウォールをクリックします。

SQLServerFireWallSetting02

 

 

 

Windowsのファイアウォール設定画面が開きます。

詳細設定をクリックします。

 

SQLServerFireWallSetting03

 

ファイアウォールの設定が見られる画面が開きます。

受信の規則をクリックします。
新しい規則。。。をクリックします。

SQLServerFireWallSetting04

SQL Serverの通信を通る規則を作ります。
TCP/IPのポート1433で作っても良いし、プログラムを指定して作ってもOKです。
今回はプログラムを指定しています。

SQLServerFireWallSetting05

 

プログラムのパスを指定します。自力で書くには難しいので、参照をクリックしてsqlserverの本体プログラムを指定します。
参照をクリックしましょう。


SQLServerFireWallSetting06

 

 

SQL Serverのファイルの在りかを事前に確かめておくと良いですが、大体は「C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Binn」辺りに居ると思います。

SQL Serverをインストールする時に規定にするか覚えておくと探さなくて済みます。
ファイルをクリックして、開くをクリックします。

SQLServerFireWallSetting07
先ほど指定したパスが張り付いていると思います。
次へをクリックします。

 

 

SQLServerFireWallSetting08

 

 

ここら辺は自分の環境に合わせて設定してください。
私は開発環境なので特にセキュリティは意識していませんが、実務に使う設定なら気にする必要があるかもしれないので。

SQLServerFireWallSetting09

 

 

ここも同じですね。自分の環境に合わせて設定してください。

SQLServerFireWallSetting10

 

 

 

 

ここでは後で見た時にわかりやすく名前で登録しておきます。
私は何も考えず、SQL Serverとしています。
名前を入力したら完了をクリックします。


SQLServerFireWallSetting11

 

設定した規則が登録されているはずですので確認します。

 

 

 

後は、実際に他のPCから接続が確認出来れば、作業は完了です。
Windows10でSQLServer2014に外部から接続出来るようにファイアウォールを設定したシステム開発備忘録でした。

SEO パーソナライズド検索

Googleの検索ってどの程度のバイアス?フィルター?がかかってるんだろう・・・って思うことないですか?
そう、所謂パーソナライズド検索ってやつのことです。
SEOをやってる人は、多分自分のサイトを検索する時にパーソナライズド検索にならないように注意してると思います。
一般の人には自分の好みに合わせて検索してくれるので概ね結果は良い方向に出るので便利な機能だと思いますが。。。

パーソナライズド検索とは

まだSEOを初めて間もない人の為に、
Googleパーソナル検索とは、過去の検索履歴、場所などを検索の条件に加味して個人の興味があるだろうを検索する検索の事です。
例えば「ゴルフ」。同じ発音で意味の違う言葉として良く例に出されて説明られています。
友達から「ゴルフどう?」って聞かれたら、スポーツのゴルフのことか、車のゴルフのことか、あなたなら予想が付きますよね?それと同じことでGoogle検索でも、検索者の過去の検索履歴によってスポーツが車のどちらを優先させるか決めています。

実際にGoogleがどのような基準でパーソナライズ検索を実施しているか私には知ることができませんが、地理的情報・過去の検索結果・ソーシャルな繋がりなどが関与しているのではと考えています。

パーソナライズド検索を無効にするには

私も詳しくないので良く言われている方法を2つ紹介しておきます。
ただし、全くパーソナライズされないかは不明です。少なくも地理的情報は取られているので、その辺りはわかりません。

ブラウザの閲覧履歴を残さないモードにする

あっ、私はブラウザを基本的にChromeとIEしか使わないので、他のブラウザの事はわかりません。あしからず。。。

Chromeの場合「シークレット モード」にします。具体的に、「三本腺メニュー」>「シークレット ウィンドウを開く」をクリックして新しいウィンドウを開けば、シークレット モードになります。
IEの場合「InPrivate ブラウズ」にします。具体的には「歯車メニュー」>「セーフティ」>「InPrivate ブラウズ」をクリックして、新しいウィンドウを開けば、シークレット モードになります。
各々ショートカット キーも有るので、物覚えの良い人は覚えると良いです。

Google Chrome
Macの場合 command+sift+N
Windowsの場合 control+sift+N

Internet Explorer
Macの場合 command+sift+P
Windowsの場合 control+sift+P

URLの後ろに「&pws=0

検索結果の後ろに「&pws=0」を付ける。
実はやり方が良く分かりません。はっきりとしたやり方が書いてあるページは有るのですが、他のページは検索に「&pws=0」を付けろと書いてあるだけなので。。。

で、いろいろ試した結果、一度検索し検索結果が出た後に「&pws=0」を付けます。
https://www.google.co.jp/webhp?sourceid=chrome-ins・・・・・・・・・&pws=0

後、この方法の派生タイプですが、「検索エンジンの編集」で「&pws=0」付きの検索エンジンを登録する方法も有りますが、普段使いには不便なので、方法も有ると言う程度で。

パーソナライズ検索はこれからもどんどん進化して行くだろうと思われます。正確な状態を把握するためにも、バイアス?フィルター?の掛かっていない状態で検索しないとダメですね。
でも、便利な機能ですね。パーソナライズ検索って。

【SQL Server】カーソル CURSOR

今回はカーソルについてです。
基本的にデータベースのデータ操作を行う際はメモリIO、ディスクIOを抑えるため一括して行う方が効率良くデータ処理ができます。しかしながら、一括でデータ操作ができないケースも出てきます。
そんな時に活躍するのがカーソル(CURSOR)です。

カーソル CURSORとは

詳細な説明はSQL Serverのドキュメントで見て欲しいのですが、カーソル(CURSOR)はselectで抽出したデータに対して一行づつ取り出すことができる逐次処理ができる仕組み・機能です。
一行づつ取り出しができるので、その行に対して処理を書けることができます。一括で処置ができない、または一括では処理が重たくてレスポンスが悪くなるなどのケースに使用します。
カーソル CURSORの使い方

カーソル(CURSOR)の使い方は難しくありません。カーソル(CURSOR)のネストもできます。ただし、もともと複雑なことを対象に処理を行うことを考えるとトランザクション設計などはきちんとしないといけませんが。。。

カーソル(CURSOR)を使うには、カーソルの宣言を行います。カーソルの宣言にはデータを抽出するSQLも合わせて示すことになります。
また、抽出した際に抽出データを入れる変数も予め宣言しておかなくてはいけません。
その後、カーソル(CURSOR)をOPENして、データが無くなる(Fetchが失敗する)までループさせ一行づつ処理を行います。
データが無くなる(強制的にループを終了させる)った後は、カーソル(CURSOR)をCLOSEして、カーソル(CURSOR)をDEALLOCATEして終わりです。

DEALLOCATEを使ったSQL例

行っていることは、

  • 変数テーブルを作成
  • 適当にデータを入れる
  • 比較する為にテーブル内のデータ抽出表示
  • 抽出用の変数を宣言
  • カーソル(CURSOR)を宣言
  • カーソル(CURSOR)のOPEN
  • Fetch(一行取り出す)
  • while文でFetchが失敗してないか評価
  • Fetchできていたら、その行のポイントを前の行のポイントを加算して更新Fetch(一行取り出す)
  • Fetch(一行取り出す)・・・ループ
  • カーソル(CURSOR)をCLOSE
  • カーソル(CURSOR)をDEALLOCATE
  • 比較する為にテーブル内のデータ抽出表示
declare @tbl1 table(
	id int,
	kbn nchar(10) ,
	point int
)

declare @start_id as int
set @start_id=0

while @start_id < 10
	begin
		print @start_id
		insert into @tbl1 values(@start_id, @start_id % 3, @start_id * Rand() * 10)
		set @start_id = @start_id +1
	end

select * from @tbl1

declare @test_id int, @test_point int
declare @add_point int
set @add_point=100

--カーソル
declare test_cursor cursor for
select id, point from @tbl1 where kbn = 1 order by id
open test_cursor

fetch next from test_cursor into @test_id, @test_point

while @@FETCH_STATUS = 0
begin
	update @tbl1 set point+=@add_point where id=@test_id
	set @add_point=@test_point
	fetch next from test_cursor into @test_id, @test_point
end
close test_cursor
deallocate test_cursor

select * from @tbl1

実行結果
sql-result02

以上、カーソル CURSORの使い方まで

 

google Webマスターツールでupdateの大量エラー WordPressのファイル修正

google Webマスターツールでupdateの大量エラーになにこれ?ってなりました^^;

久しぶりにgoogle Webマスターツールを覗いてみたところ、構造化データのhatomという欄に大量のエラーが発生していました。
うーん、なんか構造化データの項目の一つ(ど言うかupdateだから更新日?)の情報が無いってことらしいです。

早速、ググってみたところ1年前以上から出てたんですね〜

で、早速修正することにしました。
環境というかテーマによって修正箇所が変わるので適宜環境に合わせて直すしかないようです。
私の環境というかテーマは、「 twentyeleven」です。
多分、他のテーマも似たような構成になっていると思いますが、違いも多々ありそうだし。。。

ということで、 「twentyeleven」では、以下のように直しました。
修正内容は、以下のように「date updated」を追加しました
修正前:

printf( __( '<span class="sep">Posted on </span><a href="%1$s" title="%2$s" rel="bookmark"><time class="entry-date" datetime="%3$s">%4$s</time></a><span class="by-author"> <span class="sep"> by </span> 

修正後:

printf( __( '<span class="sep">Posted on </span><a href="%1$s" title="%2$s" rel="bookmark"><time class="entry-date date updated" datetime="%3$s">%4$s</time></a><span class="by-author"> <span class="sep"> by </span> 

修正ファイルは、「function.php」でディレクトリの有かは、wp-content\themes\twentyelevenに有ります。
修正場所は、以下の通りです。見つけてください。

if ( ! function_exists( 'twentyeleven_posted_on' ) ) :
/**
 * Print HTML with meta information for the current post-date/time and author.
 *
 * Create your own twentyeleven_posted_on to override in a child theme
 *
 * @since Twenty Eleven 1.0
 */
function twentyeleven_posted_on() {
	printf( __( '<span class="sep">Posted on </span><a href="%1$s" title="%2$s" rel="bookmark"><time class="entry-date date updated" datetime="%3$s">%4$s</time></a><span class="by-author"> <span class="sep"> by </span> <span class="author vcard"><a class="url fn n" href="%5$s" title="%6$s" rel="author">%7$s</a></span></span>', 'twentyeleven' ),
		esc_url( get_permalink() ),
		esc_attr( get_the_time() ),
		esc_attr( get_the_date( 'c' ) ),
		esc_html( get_the_date() ),
		esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
		esc_attr( sprintf( __( 'View all posts by %s', 'twentyeleven' ), get_the_author() ) ),
		get_the_author()
	);
}
endif;

これでエラーが修正されるか暫くしてから確認する予定です。
以上、システム開発備忘録でした。

PS.
 3日目でエラー数が若干減りました。若干ですが、新たに増えてないので修正OKな感じです。
 引き続き、暫く監視します。