さて、私はしばらくここで転がっていましたが、今は立ち往生しています。DataGridView のデータを取得するためのクエリを作成し、その後、それを置き換えるためのより短いクエリを考え出しました。選択クエリを変更した後、何らかの理由で datagridview コントロールのセルを編集できなくなりました。唯一の違いは、編集する必要がある列のテーブル全体 ( ITEMテーブルまたはi ) を選択する代わりに、別のテーブルを選択して ITEM テーブルをそれに結合していることです。
ITEM.Amount [Payment]
編集する必要がある列です。最初のクエリでは編集できますが、2 番目のクエリでは編集できません。. .
作業クエリ:
select ct.[Employee]
, cT.[Employee ID]
, cT.[Case Number]
, cT.[Usual Payment]
, cT.[Scheduled Ded.]
, i.amount [Payment]
, i.Paycard_Date [Paycard Date]
, i.ID [item_id]
, i.modified [iMod]
from dbo.Item i
right join
(select
case(ISNULL(e.middle_name,'99'))
when '99' then e.First_Name + ' ' + e.Last_Name
else (e.First_Name + ' ' + e.Middle_Name + ' ' + e.Last_Name)
end as Employee
, e.Number [Employee ID]
, c.number [Case Number]
, c.weekly_payment [Usual Payment]
, c.payment_balance [Scheduled Ded.]
, s.Agency [Source]
, c.modified [cMod]
, e.modified [eMod]
, s.modified [sMod]
, c.ID
from tCase c
inner join Employee e
on e.ID = c.ID_Employee
inner join Source s
on s.ID = c.ID_Source) as cT
on cT.ID = i.ID_Case
機能しないクエリ:
declare @paycard_date datetime
set @paycard_date = '1/10/2013'
select (isnull(e.First_Name,'') + ' ' + ISNULL(e.Middle_Name,'') + ' ' + ISNULL(e.Last_Name, '')) [Employee]
, e.Number
, c.Number
, c.Weekly_Payment
, c.Payment_Balance
, ISNULL(i.amount,'') [Payment]
, s.Agency
, isnull(i.Created,'') [created]
, isnull(i.Modified,'') [modified]
, ISNULL(i.ID,'') [Item ID]
from tcase c
inner join Employee e
on e.ID = c.ID_Employee
inner join Source s
on s.ID = c.ID_Source
left join
(select *
from item i
where paycard_date = @paycard_date) as i
on i.id_case = c.ID
繰り返しますが、クエリは両方とも機能しますが、「機能しない」クエリでは ITEM.Amount [Payment] 列を編集できません。これは、結合されたテーブル/列を DGV コントロールで編集できないためだと思いますが、よくわかりません。ユーザーがedit-cell-modeを終了するとデータを更新するように VB.net コードを追加しましたが、ユーザーが最初にedit-cell-modeに入ることができない場合はあまり効果がありません。
編集: 私が達成しようとしていることを説明しようとします。例として、100 個のケースファイルがあるとします。これらは tCase テーブルに格納されます。ケースは、従業員の給与からの差し押さえを追跡します。実際の飾り控除はItemテーブルに保存されます。毎週、ケースごとに、ユーザーはリストを下に移動して、その週のアイテムを追加 (または編集) する必要があります。アイテムが作成されるまで (つまり、0 ドルでなくなるまで)、そのアイテムの行は明らかにアイテム テーブルに存在しません。これは、新しい週のデータを表示しても実際には何も表示されず、古い週のデータを編集すると金額がゼロになることを意味します。
したがって、私が書いたクエリは、各 Case エントリをプルし、次のサブテーブルを左結合することで問題を解決します。
(select *
from item i
where paycard_date = @paycard_date) as i
したがって、私の新しい質問は...このデータをプルする方法を再考する必要がありますか、それとも列がサブテーブルとしてプルされていても DataGridView の列を編集することは可能ですか?