GridView のカラムにアクセスしようとしても、AutoGenerateColumns="true" だと Columns.Count が 0 になります!
AutoGenerateColumns="false" にして列定義をするとコードビハインドから Columns コレクションにアクセスできるようになります。
http://stackoverflow.com/questions/3819247/gridview-hide-column-by-code
2012年12月15日土曜日
2012年12月13日木曜日
ASP.NET 開発サーバーでのプロジェクト実行
元々IIS上で動かしていたプロジェクトを Visual Studio の開発サーバーで動作させようとすると、以下のエラーが出ることがあります。
このプロジェクトを開くには、仮想ディレクトリを構成する必要があります。今すぐ仮想ディレクトリを作成しますか?
これは、プロジェクトの Web.config で「IISを使います」という指定がされているため開発サーバーで動作させることができないためです。UseIIS に False を設定することでプロジェクトを開発サーバーで動作させることができるようになります。
Web.config 設定箇所: ProjectExtensions - VisualStudio - FlavorProperties - WebProjectProperties - UseIIS
このプロジェクトを開くには、仮想ディレクトリを構成する必要があります。今すぐ仮想ディレクトリを作成しますか?
これは、プロジェクトの Web.config で「IISを使います」という指定がされているため開発サーバーで動作させることができないためです。UseIIS に False を設定することでプロジェクトを開発サーバーで動作させることができるようになります。
Web.config 設定箇所: ProjectExtensions - VisualStudio - FlavorProperties - WebProjectProperties - UseIIS
2012年12月10日月曜日
HTMLエンコードツール
blogger で Syntax Highlighter を使おうとしても、実装コードそのままではうまくハイライトされません。コードの特殊文字をエンティティ化しないといけないみたいなので、ツールを作ってみました。
置き換える文字は「&」、「>」、「"」、「'」の4つです。
置き換える文字は「&」、「>」、「"」、「'」の4つです。
2012年12月9日日曜日
WPF コンテキストメニューを作ってみよう!
今回は簡単なコンテキストメニューを実装してみます。
WPF の コンテキストメニューは FrameworkElement のプロパティですので Button、RadioButton、CheckBox、TextBlock などのコントロールで利用できます。
実装方法はコントロールの ContextMenu クラスに MenuItem を割り当てます。
ここでは Style を使ってコンテキストメニューを用意していますが、コントロールに直接定義することもできます。
FrameworkElement の派生クラスはこちら↓
FrameworkElement 階層
http://msdn.microsoft.com/ja-jp/library/ms602719%28v=vs.80%29.aspx
WPF の コンテキストメニューは FrameworkElement のプロパティですので Button、RadioButton、CheckBox、TextBlock などのコントロールで利用できます。
実装方法はコントロールの ContextMenu クラスに MenuItem を割り当てます。
ここでは Style を使ってコンテキストメニューを用意していますが、コントロールに直接定義することもできます。
<Grid> <Grid.Resources> <!-- コンテキストメニュー --> <Style TargetType="Button"> <Setter Property="ContextMenu"> <Setter.Value> <ContextMenu> <MenuItem Header="1"/> <MenuItem Header="2"/> <MenuItem Header="3"/> </ContextMenu> </Setter.Value> </Setter> </Style> </Grid.Resources> <Button Content="Button" Name="button1" Height="23" Width="75"> <!-- これでもいけます --> <!--<Button.ContextMenu> <ContextMenu> <MenuItem Header="item1"/> <MenuItem Header="item2"/> <MenuItem Header="item3"/> </ContextMenu> </Button.ContextMenu>--> </Button> </Grid>
FrameworkElement の派生クラスはこちら↓
FrameworkElement 階層
http://msdn.microsoft.com/ja-jp/library/ms602719%28v=vs.80%29.aspx
2012年12月8日土曜日
WPF テンプレート編集
WPF ではテンプレートを編集することで、簡単に見た目を変えることができます。今回は、RadioButton に Button の外観を設定してオプションボタンを作成してみます。 (エクセルにあるやつです。)
1.ExpressionBlend で RadioButton のテンプレートをコピーして編集します。
コンテキストメニューの「テンプレートの編集」 →「コピーして編集」
2.デフォルトで使われている BulletDecorator を Button コントロールに置き換えます。
複数あるボタンから一つのみを選択することができます。RadioButton なので当然ですが ^^;
1.ExpressionBlend で RadioButton のテンプレートをコピーして編集します。
コンテキストメニューの「テンプレートの編集」 →「コピーして編集」
テンプレートを編集 |
2.デフォルトで使われている BulletDecorator を Button コントロールに置き換えます。
<Window.Resources> <SolidColorBrush x:Key="CheckBoxStroke" Color="#8E8F8F"/> <Style x:Key="CheckRadioFocusVisual"> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <Rectangle Margin="14,0,0,0" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="{x:Type RadioButton}"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> <Setter Property="Background" Value="#F4F4F4"/> <Setter Property="BorderBrush" Value="{StaticResource CheckBoxStroke}" /> <Setter Property="BorderThickness" Value="1"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type RadioButton}"> <!-- デフォルトの BulletDecorator をコメントアウト --> <!--<BulletDecorator> <BulletDecorator.Bullet> <Microsoft_Windows_Themes:BulletChrome BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" IsChecked="{TemplateBinding IsChecked}" IsRound="true" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}"/> </BulletDecorator.Bullet> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </BulletDecorator>--> <!-- 代わりに Button を配置 --> <Button> <Button.Content> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </Button.Content> </Button> <!-- 代わりに Button を配置 --> <ControlTemplate.Triggers> <Trigger Property="HasContent" Value="true"> <Setter Property="FocusVisualStyle" Value="{StaticResource CheckRadioFocusVisual}"/> <Setter Property="Padding" Value="4,0,0,0"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid> <RadioButton GroupName="radio" Content="A" x:Name="radioButton1" Height="30" Width="30" Margin="200,141,273,140" /> <RadioButton GroupName="radio" Content="B" x:Name="radioButton2" Height="30" Width="30" Margin="236,141,237,140" /> <RadioButton GroupName="radio" Content="C" x:Name="radioButton3" Height="30" Width="30" Margin="272,141,201,140" /> </Grid>
複数あるボタンから一つのみを選択することができます。RadioButton なので当然ですが ^^;
2012年12月7日金曜日
匿名メソッド・ラムダ式
匿名メソッドとラムダ式の実装例です。
public MainWindow() { InitializeComponent(); // イベントハンドラのデリゲート this.button1.Click += new RoutedEventHandler(button1_Click); // 匿名メソッド this.button1.Click += delegate(object sender, RoutedEventArgs e) { Debug.WriteLine("匿名メソッド"); }; // ラムダ式いろいろ // ラムダ式1行の場合 その1 this.button1.Click += (sender, e) => Debug.WriteLine("ラムダで1行"); // ラムダ式1行の場合 その2 this.button1.Click += (sender, e) => { MessageBox.Show("こんな風にも書けます"); }; // ラムダ式複数行の場合 this.Loaded += (sender, e) => { Debug.WriteLine("複数行で"); Debug.WriteLine("書く場合"); }; } // イベントハンドラ private void button1_Click(object sender, RoutedEventArgs e) { Debug.WriteLine("イベントハンドラ"); }
10 行でズバリ!! 匿名メソッドによるイベント ハンドラの実装 (C#)
http://code.msdn.microsoft.com/windowsdesktop/10-C-367d998d
2012年12月3日月曜日
ASP.NET GridView でページング
ASP.NET の GridView でページングを使う実装例です。
ページング時に発生する PageIndexChanging をハンドルしてページインデックス指定とデータの再バインドをします。↓こんな感じ
ASPX
C#
PageIndexChanging に上記実装をしていないと、ページが変わりません。ご注意下さい~!!
paging in gridview in asp.net
http://www.codeproject.com/Questions/262776/paging-in-gridview-in-asp-net
ページング時に発生する PageIndexChanging をハンドルしてページインデックス指定とデータの再バインドをします。↓こんな感じ
ASPX
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" Height="292px" onpageindexchanging="GridView1_PageIndexChanging" Width="406px"> </asp:GridView>
C#
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataColumn[] PrimaryColumn = new DataColumn[1]; DataTable datatable = new DataTable(); PrimaryColumn[0] = datatable.Columns.Add("ID", typeof(string)); datatable.Columns.Add("ProductName", typeof(string)); datatable.Columns.Add("Description", typeof(string)); for (int i = 0; i < 100; i++) { datatable.Rows.Add(i.ToString(), "Product : " + i.ToString(), "Note : " + i.ToString()); } datatable.PrimaryKey = PrimaryColumn; Session["data"] = datatable; } this.GridView1.DataSource = Session["data"]; this.GridView1.DataBind(); } protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { this.GridView1.PageIndex = e.NewPageIndex; this.GridView1.DataBind(); }
PageIndexChanging に上記実装をしていないと、ページが変わりません。ご注意下さい~!!
paging in gridview in asp.net
http://www.codeproject.com/Questions/262776/paging-in-gridview-in-asp-net
登録:
投稿 (Atom)