DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ストアドの列名をかえてDataGridで表示したい。

環境/言語:[OS:XPpro VB.net2003+MSDE]
分類:[.NET]

いつも参考にさせていただいております。
下記のようにDB内にあるデータベースに接続し、列名をかえて表示したいのですが、なかなか上手くいきません。ご存知の方ご教授ねがいます。
環境はOS XPpro VB.net2003 MSDEです。 
Sub DataGrid_VIEW()
Dim cd As New SqlCommand
Dim da As New SqlDataAdapter(cd)
Dim ds As DataSet = New DataSet("SE_JOB_T")

Dim dt As DataGridTableStyle
Dim year As DataGridTextBoxColumn
Dim month As DataGridTextBoxColumn
Dim DV As DataView

Dim J_YEAR As SqlParameter
Dim J_MONTH As SqlParameter

Try

Call SQL_OPEN()

cd.CommandText = "SE_JOB_T"
cd.Connection = CN
cd.CommandType = CommandType.StoredProcedure
cd.Parameters.Clear()
J_YEAR = cd.Parameters.Add("@J_YEAR", SqlDbType.Int)
      : J_YEAR.Value = Me.txtYEAR.Text
J_MONTH = cd.Parameters.Add("@J_MONTH", SqlDbType.Int)
      : J_MONTH.Value = Me.txtMONTH.Text
da.Fill(ds)

DV = New DataView(ds.Tables("SE_JOB_T"))
DV.AllowNew = False

dt = New DataGridTableStyle
dt.AllowSorting = False
dt.MappingName = "SE_JOB_T"
Me.dgTIMECARD.TableStyles.Clear()
Me.dgTIMECARD.TableStyles.Add(dt)

dt.GridColumnStyles.Clear()
year = New DataGridTextBoxColumn
year.MappingName = "J_YEAR"
year.HeaderText = "年"
year.NullText = ""
year.Width = 100
dt.GridColumnStyles.Add(year)

dt.GridColumnStyles.Clear()
month = New DataGridTextBoxColumn
month.MappingName = "J_MONTH"
month.HeaderText = "月"
month.NullText = ""
month.Width = 100
dt.GridColumnStyles.Add(month)

Me.dgTIMECARD.DataSource = DV


Call SQL_CLOSE()

Catch ex As Exception

MsgBox(ex.ToString)

End Try

End Sub

ストアドプロシージャー

CREATE PROCEDURE SE_JOB_T
(
@J_YEAR NUMERIC(4,0),
@J_MONTH NUMERIC(2,0)
)
AS
SELECT
M.J_DATE,
M.J_WEEK,
YEAR(M.J_DATE) AS J_YEAR,
MONTH(M.J_DATE) AS J_MONTH,
DAY(M.J_DATE) AS J_DAY,
M.JOB_TYPE,
M.KIHON_T,
(
SELECT
ROUND(SUM(S1.KIHON_T),3)
FROM VI_JOB_T AS S1
WHERE S1.J_DATE <= M.J_DATE
AND J_YEAR = @J_YEAR
AND J_MONTH = @J_MONTH
) AS KIHON_TO,
(
SELECT
ROUND(SUM(S2.ZANGYOU_T),3)
FROM VI_JOB_T AS S2
WHERE S2.J_DATE <= M.J_DATE
AND J_YEAR = @J_YEAR
AND J_MONTH = @J_MONTH
) AS ZANGYOU_TO,
(
SELECT
ROUND(SUM(S3.SINYA_T),3)
FROM VI_JOB_T AS S3
WHERE S3.J_DATE <= M.J_DATE
AND J_YEAR = @J_YEAR
AND J_MONTH = @J_MONTH
)
AS SINYA_TO,
M.ZANGYOU_T,
M.SINYA_T,
M.DRIVE_S,
M.DRIVE_E,

CASE JOB_TYPE
WHEN 0 THEN
ROUND(KIHON_T * (SELECT K_PAY FROM PAY_MONEY_T),0)
WHEN 1 THEN
0
END AS K_TOTAL,

CASE JOB_TYPE
WHEN 0 THEN
0
WHEN 1 THEN
ROUND(KIHON_T * (SELECT Z_PAY FROM PAY_MONEY_T),0)
END AS KY_TOTAL,

ROUND(ZANGYOU_T * (SELECT Z_PAY FROM PAY_MONEY_T),0) AS Z_TOTAL,
ROUND(SINYA_T * (SELECT S_PAY FROM PAY_MONEY_T),0) AS S_TOTAL,

CASE JOB_TYPE
WHEN 0 THEN
ROUND(DRIVE_S * (SELECT D_PAY FROM PAY_MONEY_T) + DRIVE_E * (SELECT D_PAY FROM PAY_MONEY_T),0)
WHEN 1 THEN
ROUND(DRIVE_S * (SELECT SD_PAY FROM PAY_MONEY_T) +DRIVE_E * (SELECT SD_PAY FROM PAY_MONEY_T),0)
END AS DV_TOTAL

FROM JOB_T AS M
WHERE YEAR(J_DATE) = @J_YEAR
AND MONTH(J_DATE) = @J_MONTH
ORDER BY J_YEAR,J_MONTH
どのあたりがうまく行かないのかわからないのですが、
dt.GridColumnStyles.Clear()
は要らないのではないですか?
早速の返信ありがとうございます!
コンパイルは正常に終了するのですが、Datagrid内は空のまま表示されてしまいます。レコードセレクタのみ表示されます。
dt = New DataGridTableStyle
dt.AllowSorting = False
dt.MappingName = "SE_JOB_T"
Me.dgTIMECARD.TableStyles.Clear()
Me.dgTIMECARD.TableStyles.Add(dt)

dt.GridColumnStyles.Clear()
year = New DataGridTextBoxColumn
year.MappingName = "J_YEAR"
year.HeaderText = "年"
year.NullText = ""
year.Width = 100
dt.GridColumnStyles.Add(year)

dt.GridColumnStyles.Clear()
month = New DataGridTextBoxColumn
month.MappingName = "J_MONTH"
month.HeaderText = "月"
month.NullText = ""
month.Width = 100
dt.GridColumnStyles.Add(month)

を、以下のようにしたらどうなりますか?

dt = New DataGridTableStyle
dt.AllowSorting = False
dt.MappingName = "SE_JOB_T"

year = New DataGridTextBoxColumn
year.MappingName = "J_YEAR"
year.HeaderText = "年"
year.NullText = ""
year.Width = 100
dt.GridColumnStyles.Add(year)

month = New DataGridTextBoxColumn
month.MappingName = "J_MONTH"
month.HeaderText = "月"
month.NullText = ""
month.Width = 100
dt.GridColumnStyles.Add(month)

Me.dgTIMECARD.TableStyles.Clear()
Me.dgTIMECARD.TableStyles.Add(dt)
返信ありがとうございます。
結果は同じになります。
ヘッダに、「年」、「月」は表示されていますでしょうか?
これが表示されていれば、単純に抽出されたデータが一件も無いということが考えられるのですが・・・
ヘッダには表示されていません。
普通にDatagridに表示するのは上手くいくのですが、
列名を変えるとなにも表示されません。
以前ACCESSでストアドが複雑(JOINすると)すぎると、列名が判断しきれないという
症状になやまされましたが、今回はそうでもなさそうだし・・・
ストアドの問題ではなさそうだし
da.Fill(ds)

da.Fill(ds, "SE_JOB_T")
ですかね。
でないと、Tableという名前でデータテーブルが出来ています。
trapemiyaさんありがとうございます。実行できました!
あと返信遅くなってごめんなさい。

DOBON.NET | プログラミング道 | プログラミング掲示板