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 顯示出正確的資料了.

posted @ 2006-09-27 23:07  马建康  阅读(379)  评论(0编辑  收藏  举报