2.0 GridView與DetailsView混合的問題 --多主键问题
這個問題也困惱了我許久, 因為很多 Table 的 Primary Key 並非只有設定一個欄位, 使用複合 Key 的狀況非常多. 最近從其他網站討論區有找到一個解決方法. 我測試了之後可以 Work了. 茲將做法描述如下, 以供有此相同問題的人參考. 謝謝!
Table 之 PK 為 KMTYPE + EFFYY + EFFMM
1. SqlDataSource1 之 SelectCommand 如下:
SelectCommand="SELECT * FROM [Table] WHERE (([KMTYPE] = @KMTYPE) AND ([EFFYY] = @EFFYY) AND ([EFFMM] = @EFFMM))"
原先之 SelectParameters 為指到 GridView1 之 ControlParameter, 屬性為 SelectedValue.
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="KMTYPE" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="GridView1" Name="EFFYY" PropertyName="SelectedValue" Type="String" />
<asp:ControlParameter ControlID="GridView1" Name="EFFMM" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
請將上述 SelectParameters 替換成下列句子:
<SelectParameters>
<asp:Parameter Name="KMTYPE" Type="String" />
<asp:Parameter Name="EFFYY" Type="String" />
<asp:Parameter Name="EFFMM" Type="String" />
</SelectParameters>
最後於 GridView1_SelectedIndexChanged 中加入 SelectParameters 的 DefaultValue 即可取得正確的值了.
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataSource1.SelectParameters[0].DefaultValue = GridView1.DataKeys[GridView1.SelectedIndex][0].ToString();
SqlDataSource1.SelectParameters[1].DefaultValue = GridView1.DataKeys[GridView1.SelectedIndex][1].ToString();
SqlDataSource1.SelectParameters[2].DefaultValue = GridView1.DataKeys[GridView1.SelectedIndex][2].ToString();
}
經過上述修改之後就算是複合Key 的 GridView 當按了 "選取" 按鈕之後, 也能讓 DetailsView 顯示出正確的資料了.