Selectした値を使ってInsertする

テーブル名:Table1
列名1:code varchar(3)
列名2:kanrencode varchar(5)

というテーブルがあるとする。
新しいcodeのデータを登録する際、
既に登録してあるcodeのkanrencodeと全く同じ値を登録したい場合、
以下のように記述。

insert into Table1
select '123',kanrencode from Table1
where code = '000'

GridView.TemplateField内のコントロールのClientIDをjavascript(クライアントサイド)で使いたい。

サーバ側のPage_Loadで、
ClientScript.RegisterArrayDeclarationメソッドを使う。
(このメソッドはjavascriptの配列を作成し、ページに埋め込んでくれる)
GridViewの行をfor文でループさせて追加していく。

foreach (GridViewRow row in gvSyohin.Rows)
{
    ClientScript.RegisterArrayDeclaration(
      "arrayExample", //配列名
      "'" + row.FindControl("対象コントロール").ClientID + "'" //配列の値
      );
}


詳しくはこちら
http://japan.internet.com/developer/20060801/26.html

AutoCompleteExtenderで幅の指定

通常は、TargetControlIDプロパティでセットされたTextBoxと同じ幅になる。
それを変えたい場合は、
CompletionListCssClassプロパティでCSSのクラスをセットし、
そのCSSで、
min-width : 400px(任意の幅);
と指定する。

AutoCompleteExtenderのプロパティ
CompletionListCssClass="css1"

<style type="text/css">
  <!--
   .css1{
    border: 1px solid gray;
    background-color: white;
    padding: 0;
    margin: 0;
    list-style: none;
    z-index: 10000;
    min-width : 400px;
   }
  -->
</style>

AutoCompleteExtenderで、textとvalueを別々にしたい!

リストに表示される値とは別にvalue値を保持しておきたい。
その場合は、ServiceMethodプロパティにセットしたメソッド内にて、
AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(<text>,<value>)メソッドを使う。
以下、リストを選択したら、textとvalueをalert表示するサンプル。
ちなみにこのまま書いても動きません。TargetControlを設定してください。


WEBサービス

[WebMethod()]
public String GetCompletionList(String prefixText, int count)
{
  string
list = new string[count];

  for (int i = 0; i < count; i++)
  {
    list[i] = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem
    (prefixText + "の" + i.ToString() + "番目", //リストに表示されるテキスト
     i.ToString() //value値(リストには表示されない)
     );
  }

  return list;

}

【ASPXソース】

<ajaxToolkit:AutoCompleteExtender runat="server"
OnClientItemSelected = "IAmSelected"
ServiceMethod = "GetCompletionList"
...>

【javascript】

function IAmSelected( source, eventArgs ) {
  alert( " text : "+ eventArgs.get_text() +" value : " + eventArgs.get_value());
}

参考:How to : Use a Key Value Pair in your AutoCompleteExtender

window.onloadが動かない時はこれを使う!ASP.NET Ajax

ASP.NET Ajax利用時の話。

javascriptでwindow.onloadを使っているけれども、
部分更新した場合に、window.onloadで書いたスクリプトが動かない。

ScriptManager.RegisterStartupScript メソッドを使ってもどうもうまくいかない。

そんな時は

<script type="text/javascript">
function pageLoad() {
  //window.onloadで設定した関数とか、行いたい処理
}
</script>

を使う。

このfunction pageLoad()というのは、ASP.NETが既定としている関数。
クライアントサイドのPage_Loadメソッドのようなもの。
Application.Loadハンドラとして動作する。
Ajaxを利用している場合は、window.onloadではなくpageLoad()を使った方が良い。
pageLoad()は部分更新にも適用されるため。

参考:
http://encosia.com/simplify-aspnet-ajax-client-side-page-initialization/

textboxでのEnterキー押下でSubmit(実行)させない!

EnterキーでのSubmitは、便利な時もあれば、迷惑な時もある。
迷惑な時には、この方法で抑止。

http://www.programming-magic.com/20080119212425/


"MSDNに書いてある方法"だと、
Firefoxの時に効かなくて困っていたけれど、上記の方法なら大丈夫だった。