【ASP.NET】の記事一覧

[ASP.NET] DataGrid に編集ボタンをつける

<asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>

    ▼ ▼ ▼ 下記に変更 ▼ ▼ ▼

■最小限の設定
<asp:DataGrid
id="DataGrid1"
OnEditCommand="DataGrid1_Edit"
OnCancelCommand="DataGrid1_Cancel"
OnUpdateCommand="DataGrid1_Update"
runat="server">

<Columns>
<asp:EditCommandColumn
EditText="編集" CancelText="中止" UpdateText="更新" ButtonType="PushButton" HeaderText="編集用" />
</Columns>
</asp:DataGrid>


■セルをHTMLで指定している場合
<asp:DataGrid
id="DataGrid1"
OnEditCommand="DataGrid1_Edit"
OnCancelCommand="DataGrid1_Cancel"
OnUpdateCommand="DataGrid1_Update"
AutoGenerateColumns="false"
runat="server">

<Columns>
<!-- 編集させたくない列には ReadOnly="true" を設定する -->
<asp:BoundColumn ItemStyle-Width="80" DataField="ID" HeaderText="ID" ReadOnly="true" />
<asp:BoundColumn ItemStyle-Width="200" DataField="Name" HeaderText="商品名" />
<asp:BoundColumn ItemStyle-Width="100" DataField="Quantity" HeaderText="数量" />
<asp:EditCommandColumn
EditText="編集" CancelText="中止" UpdateText="更新" ButtonType="PushButton" HeaderText="編集用" />
</Columns>
</asp:DataGrid>

    '--- 宣言
    'DataTableCtrlクラスのインスタンスを作成(DataTableCtrlクラスをインスタンス化)
    Private clsDataTableCtrl As New DataTableCtrl


'---------------------------------------------------------------
' Page_Load
'---------------------------------------------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If IsPostBack = False Then
'DataTableCtrlクラスで作成したテーブルをセッションに格納
Session("UserTable") = DataTableCtrl.CreateTable
BindDataGrid1()
Else
'セッションに格納されているテーブルをDataTableCtrlクラスのテーブルにセット
clsDataTableCtrl.MyTable = CType(Session("UserTable"), DataTable)
End If
End Sub

'---------------------------------------------------------------
' DataGrid 表示
'---------------------------------------------------------------
Sub BindDataGrid1()
'DataTableCtrlクラスのテーブルをDataSourceにセット
DataGrid1.DataSource = clsDataTableCtrl.MyTable
DataGrid1.DataBind()
End Sub

'---------------------------------------------------------------
' [編集]ボタン クリック
'---------------------------------------------------------------
Sub DataGrid1_Edit(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
'編集状態にする
DataGrid1.EditItemIndex = e.Item.ItemIndex
BindDataGrid1()
End Sub

'---------------------------------------------------------------
' [中止]ボタン クリック
'---------------------------------------------------------------
Sub DataGrid1_Cancel(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
'編集状態のキャンセル
DataGrid1.EditItemIndex = -1
BindDataGrid1()
End Sub

'---------------------------------------------------------------
' [更新]ボタン クリック
'---------------------------------------------------------------
Sub DataGrid1_Update(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
Dim TB1 As TextBox = CType(e.Item.Cells(1).Controls(0), TextBox) '商品名テキストボックス
Dim TB2 As TextBox = CType(e.Item.Cells(2).Controls(0), TextBox) '数量テキストボックス

'編集行のIDセルの内容を取得
Dim ID As Integer = CInt(DataGrid1.Items(DataGrid1.EditItemIndex).Cells(0).Text)
DataTableCtrl.Update(ID, TB1.Text, CInt(TB2.Text))

'編集状態のキャンセル
DataGrid1.EditItemIndex = -1
BindDataGrid1()
End Sub

'***************************************************************
' DataTable 操作用クラス(Sharedで静的に)
'***************************************************************
Public Class DataTableCtrl
    '--- 宣言
    Private Shared _DT As DataTable

'---------------------------------------------------------------
' DataTable のプロパティ
'---------------------------------------------------------------
Public Shared Property MyTable() As DataTable
Get
Return _DT
End Get
Set(ByVal Value As DataTable)
_DT = Value
End Set
End Property

'---------------------------------------------------------------
' DataTable の作成
'---------------------------------------------------------------
Public Shared Function CreateTable() As DataTable
'データテーブルの作成
_DT = New DataTable
_DT.Columns.Add(New DataColumn("ID", System.Type.GetType("System.Int16")))
_DT.Columns.Add(New DataColumn("Name", System.Type.GetType("System.String")))
_DT.Columns.Add(New DataColumn("Quantity", System.Type.GetType("System.Int16")))

'初期データの登録
Insert(1, "リンゴ", 5)
Insert(2, "みかん", 10)
Insert(3, "さくらんぼ", 3)
Insert(4, "バナナ", 20)

Return _DT
End Function

'---------------------------------------------------------------
' DataTable にレコード追加
'---------------------------------------------------------------
Public Shared Sub Insert(ByVal ID As Integer, ByVal Name As String, ByVal Num As Integer)
Dim DR As DataRow = _DT.NewRow
DR("ID") = ID : DR("Name") = Name : DR("Quantity") = Num
_DT.Rows.Add(DR)
End Sub

'---------------------------------------------------------------
' DataTable のレコード更新
'---------------------------------------------------------------
Public Shared Sub Update(ByVal ID As Integer, ByVal Name As String, ByVal Num As Integer)
Dim DR As DataRow = _DT.Select("ID=" + CStr(ID))(0)
DR("Name") = Name : DR("Quantity") = Num
End Sub

End Class

2005 / 11 / 08

[ASP.NET|Access] Access に接続

    Dim Conn As New OleDbConnection
    Dim Cmd As New OleDbCommand

'DB接続文字列の設定
'注:プロジェクトファイルホルダの下にあるbinホルダにMDBを置く
'System.AppDomain.CurrentDomain.BaseDirectory = App.Path
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
System.AppDomain.CurrentDomain.BaseDirectory & "\bin\***.mdb"

'コネクションの設定
Cmd.Connection = Conn

'DB接続
Conn.Open()

'SQL文の設定
strSQL = "SELECT * FROM BookMark ORDER BY SiteNo"
Cmd.CommandText = strSQL

DS.Dispose()
DA.Dispose()
Cmd.Dispose()
Conn.Dispose()

2005 / 10 / 14

[ASP.NET] Dataset と DataReader

@ITより

2005 / 10 / 13

[ASP.NET] DataReader からチェックボックスリストへ(ドロップダウンリストと同じ)

        Do While (DR.Read)
            cbl_Cate.Items.Add(New ListItem(DR.Item("CateName")))
        Loop

cbl_Cate.RepeatLayout = RepeatLayout.Table '表のレイアウトで表示
'cbl_Cate.RepeatLayout = RepeatLayout.Flow
'cbl_Cate.RepeatDirection = RepeatDirection.Horizontal'アイテムを水平に表示
cbl_Cate.RepeatDirection = RepeatDirection.Vertical 'アイテムを垂直に表示

2005 / 10 / 13

[ASP.NET|MySQL] MySQL に接続 (.NET/ODBC)

        Dim Conn As OdbcConnection
        Dim strConn As String

strConn = "DRIVER={MySQL ODBC 3.51 Driver};" & _
"SERVER=localhost;" & _
"DATABASE=test;" & _
"UID=[ ユーザー名 ];" & _
"PASSWORD=[ パスワード ];"

Conn = New OdbcConnection
Conn.ConnectionString = strConn

Conn.Open()

2005 / 10 / 06

[ASP.NET] DataGrid (背景色の設定)

'--- 行ごとに交互に背景色を設定(DataBind前)

MyGrid.HeaderStyle.BackColor = ColorTranslator.FromHtml("#BB2255")
MyGrid.HeaderStyle.ForeColor = ColorTranslator.FromHtml("White")
MyGrid.ItemStyle.BackColor = ColorTranslator.FromHtml("#FFEEEE") '項目の設定
MyGrid.AlternatingItemStyle.BackColor = ColorTranslator.FromHtml("#FFDDDD") '交互の設定

行単位でグラデーションに設定:(DataBind後)

Dim Argb As Color = Color.FromArgb(255, Inc * intRow, 0) '(赤,緑,青)
Dim Inc As Integer = 255 / (MyGrid.Items.Count)
Dim intRow As Integer = 0

For intRow = 0 To MyGrid.Items.Count - 1
MyGrid.Items(intRow).BackColor = Argb
MyGrid.Items(intRow).Cells(0).Text = Argb.ToString
Next intRow

2005 / 10 / 06

[ASP.NET] DataGrid (ハイパーリンクを表示)

        'DBに7列分のデータがある場合
        Dim HLC(7) As HyperLinkColumn

'1列目にリンクを設定
HLC(0) = New HyperLinkColumn
HLC(0).DataTextField = "Title" 'DBの項目名
HLC(0).DataNavigateUrlField = "Url" 'DBの項目名
'行番号などをURLにしたい時(55行目のリンク先が.aspx?target=55の時)
'HLC(0).DataNavigateUrlFormatString = "WebForm1.aspx?target={0}"

HLC(0).HeaderText = "タイトル(リンクつき)" 'DataGridの項目名
MyGrid.Columns.AddAt(0, HLC(0))

[ DataSourceセット ]
[ DataBind ]

2005 / 10 / 06

[ASP.NET] DataGrid (特定の列のみ表示)

        'DBに7列分のデータがある場合
        '内2列分をDataGridに表示
        Dim BC(7) As BoundColumn

MyGrid.AutoGenerateColumns = False
MyGrid.Columns.Clear()

'DataGridに表示する1列目
BC(0) = New BoundColumn
BC(0).DataField = "UserId" 'DBの項目名
BC(0).HeaderText = "ユーザーID" 'DataGridの項目名
MyGrid.Columns.AddAt(0, BC(0))

'DataGridに表示する2列目
BC(1) = New BoundColumn
BC(1).DataField = "UserName"
BC(1).HeaderText = "名前"
MyGrid.Columns.AddAt(1, BC(1))

[ DataSourceセット ]
[ DataBind ]

2005 / 10 / 06

[ASP.NET|SQL Server] SQL Server に接続

 
       Dim Conn As New System.Data.SqlClient.SqlConnection
       Dim Cmd As New System.Data.SqlClient.SqlCommand

Conn.ConnectionString = "server=localhost;User=sa;Password=;database=TEST;"
Cmd.Connection = Conn
Cmd.CommandText = "SELECT * FROM UserTable ORDER BY UserName ASC"

        Dim Conn As System.Data.SqlClient.SqlConnection
        Dim Cmd As System.Data.SqlClient.SqlCommand
 
        Conn = New SqlConnection("server=localhost;User ID=sa;Password=;database=TEST;")
        Conn.Open()

Cmd = New SqlCommand("SELECT * FROM UserTable ORDER BY UserName ASC", Conn)

        '終了処理
        Cmd.Dispose()
        Conn.Dispose()

2005 / 10 / 06

[ASP.NET|SQL Server] SQLServer認証 と WINDOWS認証

        Dim Conn As New System.Data.SqlClient.SqlConnection
        Dim strConn As String

If Type = "SQLServerSQL" Then

'▼SQLServer認証▼
strConn = "Persist Security Info=True;" & _
"database=master;" & _
"server=localhost;" & _
"User=sa;" & _
"Password=;"

ElseIf Type = "SQLServerWIN" Then

'▼WINDOWS認証▼
strConn = "Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Initial Catalog=master;" & _
"Data Source=hocalhost;"
End If

Conn.ConnectionString = strConn

2005 / 10 / 06

[ASP.NET] ViewState と Session

■ViewStateへのユーザ状態の保存
    ・ その画面内でしか利用されない一時的な入力仕掛りデータを入れる。 
    ・ 漏洩(解読)やデータ再送(リプレイ攻撃)されると困るようなデータは含めない(詳細は後述)。 
    ・ 一時的にダーティになることがあってもよい。 
   
■Sessionオブジェクトへのユーザ状態の保存 
    ・ ショッピングカート情報や、一連のウィザード画面での入力仕掛りデータなど、
   画面間で引き継ぐデータを入れる。 
    ・ 各画面では入力チェック(フォーマットチェックなど)を完了したデータのみを入れ、
   常にクリーンに保つように設計するとよい。 
    ・ 当該画面内でしか利用しないデータであっても、(クレジットカード番号のように)
   セキュリティを要求されるデータである場合には、Sessionオブジェクトに入れて保存する。
   
   Dim DataSet As String

' 格納
Session("DataName") = DataX
ViewState("DataName") = DataX

' 取り出し
DataX = CType(Session("DataName"), [ObjectType])
DataX = CType(ViewState("DataName"), [ObjectType])

2005 / 10 / 06

[ASP.NET] Server.Transfer(サーバーコントロール)で他のページへ送信

'--- 送信側: htmlに <%@ ClassName="WebForm1Class" %> を追加する。

Private Sub btnTransfer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTransfer.Click
Server.Transfer("Test.aspx")
End Sub

Public ReadOnly Property Name() As String
Get
Return txtName.Text
End Get
End Property

Public ReadOnly Property Address() As String
Get
Return txtAddress.Text
End Get
End Property

'--- 受信側: htmlに <%@ Reference Page="WebForm1.aspx" %> を追加する。
        Dim FP As sample.ViewState                   
        If Not IsPostBack Then
            FP = CType(Context.Handler, sample.ViewState)
        End If
        lblName3.Text = FP.Name
        lblAddress3.Text = FP.Address

2005 / 10 / 06

[ASP.NET] HttpContextで他のページへ送信

'送信側:

context.Items.Add("NAME", txtName.Text)
context.Items.Add("ADDRESS", txtAddress.Text)
context.Server.Transfer("Test.aspx")

'受信側:

lblName2.Text = context.Items("NAME")
lblAddress2.Text = context.Items("ADDRESS")

2005 / 10 / 06

[ASP.NET] Redirectで他のページへ送信

'送信側:

Dim strURL As String
strURL = "Test.aspx?NAME=" & txtName.Text & "&ADDRESS=" & txtAddress.Text
Response.Redirect(strURL)

'受信側:

lblName1.Text = Request.QueryString("NAME")
lblAddress1.Text = Request.QueryString("ADDRESS")

2005 / 10 / 06

[ASP.NET|SQL Server] SQL Server へアップデート

            Dim NewPass As String
            
            NewPass = "****"
            Dim Conn As SqlConnection
            Dim Cmd As SqlCommand

Conn = New SqlConnection("server=localhost;User ID=sa;Password=;database=TEST;")
Conn.Open()

Cmd = New SqlCommand("UPDATE UsersMst SET Pass=@Pass WHERE Id=@Id", Conn)

Cmd.Parameters.Add("@Id", SqlDbType.VarChar, 6)
Cmd.Parameters("@Id").Value = User.Identity.Name
Cmd.Parameters.Add("@Pass", NewPass)
Cmd.ExecuteNonQuery()

Cmd.Dispose()
Conn.Dispose()

2005 / 10 / 06

[ASP.NET|SQL Server] SQL Server からドロップダウンリストへ

        Dim Conn As SqlConnection
        Dim Cmd As SqlCommand
        Dim DR As SqlDataReader

Conn = New SqlConnection("server=localhost;User ID=sa;Password=;database=TEST;")
Conn.Open()

Cmd = New SqlCommand("SELECT * FROM RolesMst ORDER BY RoleNO ASC", Conn)

'クエリを実行して、DataReader を確立する
DR = Cmd.ExecuteReader

ddlRole.Items.Add(New ListItem("選択してください", ""))

'DataReader から1行ずつ読み込む
Do While (DR.Read())
'ドロップダウンリストに各フィールドの内容を追加する
ddlRole.Items.Add(New ListItem(DR.Item("RoleText"), DR.Item("RoleValue")))
Loop

DR.Close()
Cmd.Dispose()
Conn.Dispose()

ddlRole.SelectedIndex = 0

2005 / 10 / 06

[ASP.NET] DataGrid に表示(3パターン)

'例1: データテーブル
 
        Dim DT As DataTable = New DataTable
        Dim DR As DataRow

DT.Columns.Add(New DataColumn("項目", GetType(String)))
DT.Columns.Add(New DataColumn("内容", GetType(String)))
DT.Columns.Add(New DataColumn("備考", GetType(String)))

DR = DT.NewRow
DR(0) = "UserID" : DR(1) = User.Identity.Name : DR(2) = ""
DT.Rows.Add(DR)

DR = DT.NewRow
DR(0) = "UserPass" : DR(1) = "******" : DR(2) = "パスワードは非表示にしています。"
DT.Rows.Add(DR)

DR = DT.NewRow
DR(0) = "UserName" : DR(1) = DB_LName & " " & DB_FName & " さん" : DR(2) = ""
DT.Rows.Add(DR)

DR = DT.NewRow
DR(0) = "UserRole" : DR(1) = UserRole : DR(2) = ""
DT.Rows.Add(DR)

Dim DV As DataView = New DataView(DT)

DataGrid1.DataSource = DV
DataGrid1.DataBind()

'例2: データテーブル(短いコード)

' Create a table to store data for the DropDownList control.
Dim DT As DataTable = New DataTable

' Define the columns of the table.
DT.Columns.Add(New DataColumn("ColorTextField", GetType(String)))
DT.Columns.Add(New DataColumn("ColorValueField", GetType(String)))

' Populate the table with sample values.
DT.Rows.Add(CreateRow("White", "White", DT))
DT.Rows.Add(CreateRow("Silver", "Silver", DT))
DT.Rows.Add(CreateRow("Dark Gray", "DarkGray", DT))
DT.Rows.Add(CreateRow("Khaki", "Khaki", DT))
DT.Rows.Add(CreateRow("Dark Khaki", "DarkKhaki", DT))

' Create a DataView from the DataTable to act as the data source
' for the DropDownList control.
Dim DV As DataView = New DataView(DT)

DataGrid1.DataSource = DV
DataGrid1.DataBind()

'例3: データセット(データアダプタ使用)

Dim DA As New System.Data.SqlClient.SqlDataAdapter
Dim DS As New DataSet

DA.SelectCommand = Cmd
DS.Clear()
DA.Fill(DS, "社員リスト")

DataGrid1.DataSource = DS
DataGrid1.DataBind()

2005 / 10 / 06

[ASP.NET|SQL Server] SQL Server から一件アイテム取得

        Dim Conn As SqlConnection
        Dim Cmd As SqlCommand

'コネクションセット
Conn = New SqlConnection("server=localhost;User ID=sa;Password=;database=TEST;")
Conn.Open()

'パスワード
Cmd = New SqlCommand("SELECT Pass FROM UsersMst WHERE Id=@Id", Conn)
Cmd.Parameters.Add("@Id", SqlDbType.VarChar, 6)
Cmd.Parameters("@Id").Value = TB_Id
DB_Pass = Cmd.ExecuteScalar

'ロール
Cmd = New SqlCommand("SELECT Role FROM UsersMst WHERE Id=@Id", Conn)
Cmd.Parameters.Add("@id", SqlDbType.VarChar, 20)
Cmd.Parameters("@Id").Value = TB_Id

If (IsDBNull(Cmd.ExecuteScalar)) Then
DB_Role = ""
Else
DB_Role = Cmd.ExecuteScalar
End If

Cmd.Dispose()
Conn.Dispose()

2005 / 10 / 06

[ASP.NET|SQL Server] SQL Server から複数アイテム取得

        Dim Conn As SqlConnection
        Dim Cmd As SqlCommand
        Dim DR As SqlDataReader

'コネクションセット
Conn = New SqlConnection("server=localhost;User ID=sa;Password=;database=TEST;")
Conn.Open()

'コマンドセット
Cmd = New SqlCommand("SELECT * FROM UsersMst WHERE Id=@Id", Conn)
Cmd.Parameters.Add("@Id", SqlDbType.VarChar, 6)
Cmd.Parameters("@Id").Value = User.Identity.Name

'データリーダーセット
DR = Cmd.ExecuteReader
DR.Read()
DB_Pass = DR.Item("Pass") 'DBの列名
DB_LName = DR.Item("LName")
DB_FName = DR.Item("FName")
DB_Kana = DR.Item("Kana")

'後処理
DR.Close()
Cmd.Dispose()
Conn.Dispose()

2005 / 10 / 06

[ASP.NET] CSVを作成・ダウンロード

    Private Sub btn_Output_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Output.Click

Dim Encoding As System.Text.Encoding

'CSVに吐き出すための処理
Response.AddHeader("Content-Disposition", "attachment;filename=DownloadTest.csv")
Response.ContentType = "application/octet-stream"

'UNICODEをSheft-JISにエンコード
'エンコードしない場合:Response.Write("あいうえおかきくけこ\r\n")
Encoding = System.Text.Encoding.GetEncoding("Shift-JIS")
Response.BinaryWrite(Encoding.GetBytes("あいうえお,かきくけこ" & Chr(10)))
Response.BinaryWrite(Encoding.GetBytes("さしすせそ,たちつてと"))
Response.End()

End Sub

2005 / 10 / 05

[ASP.NET] ファイルをアップロードする

    Private Sub btn_Update_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Update.Click

'ツールボックスHTMLの[File Field]を使用
'[File Field]を右クリック→サーバーコントロールとして実行

Dim FilePath As String
FilePath = FileField.Value
Img.ImageUrl = FilePath

End Sub

2005 / 10 / 05

[ASP.NET] メッセージボックス表示

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

btn_Click.Attributes.Add("OnClick", "alert('OKですか?');") '[OK]オンリー
btn_Click.Attributes.Add("OnClick", "return confirm('OKですか?');") '[OK]+[キャンセル]

End Sub

Private Sub btn_Click_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Click.Click

'OKの時だけここを通る
lbl_Msg.Text = "OKがクリックされました。"

End Sub

2005 / 10 / 05