在gridview的edit模式下動態動態塞入值
很多時候都用的到..例如常常都會要編輯的時候..才會知道gridview編輯模式裡的值..例如validation..droplist等等..所以我就簡單的寫了這個gridview+droplist的範例..裡面的事件方法也常用到..參考一下ㄅ..
aspx
<form id="form1" runat="server"> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>" SelectCommand="SELECT [EmployeeID], [LastName], [FirstName], [Title] FROM [Employees]"> </asp:SqlDataSource> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID" DataSourceID="SqlDataSource1" OnRowDataBound="GridView1_RowDataBound"> <Columns> <asp:TemplateField HeaderText="EmployeeID" InsertVisible="False" SortExpression="EmployeeID"> <EditItemTemplate> <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>" SelectCommand="SELECT [OrderID], [ShipName] FROM [Orders] WHERE ([EmployeeID] = @EmployeeID)"> <SelectParameters> <asp:Parameter Name="EmployeeID" Type="Int32" /> </SelectParameters> </asp:SqlDataSource> <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="ShipName" DataValueField="OrderID"> </asp:DropDownList> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("EmployeeID") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="LastName" HeaderText="LastName" ReadOnly="True" SortExpression="LastName" /> <asp:BoundField DataField="FirstName" HeaderText="FirstName" ReadOnly="True" SortExpression="FirstName" /> <asp:BoundField DataField="Title" HeaderText="Title" ReadOnly="True" SortExpression="Title" /> <asp:TemplateField> <EditItemTemplate> update </EditItemTemplate> <ItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Edit">Edit</asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </form>
cs
public partial class test_dataSource : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { //只對datarows作用 if (e.Row.RowType == DataControlRowType.DataRow) { //判斷是否是編輯欄..因為gridview還有分單雙所以要多加Alternamte if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == (DataControlRowState.Edit | DataControlRowState.Alternate)) { //把sqldatasource餵值 string id = GridView1.DataKeys[e.Row.RowIndex][0].ToString(); ((SqlDataSource)e.Row.FindControl("SqlDataSource2")). SelectParameters["EmployeeID"].DefaultValue = id; } } } }
重點就是..那偶數跟單數的判斷方式..因為有時忘了..程式寫出來..真的會ox..^^..
參考: