所以问题是我想限制用户在通过 datagridview 更新时可以插入的内容。我想将该特定字段转换为模板,并使其成为具有有限选项的下拉列表来更新此类字段。问题是,当我使用它运行测试时,它会将字段更新为空。在没有模板字段的情况下,绑定到 datagridview 的 sqldatasource 更新得非常好。
我能够在一张桌子上毫无问题地完成这项工作,但是当我为另一张桌子尝试同样的事情时,它一直在下拉列表中给我一个空值。后者绑定到 SqlDataSource。我检查了gridview和数据源上的代码,它几乎相同。我看不出有什么问题。
这是我的 SqlDataSource 的代码
<asp:SqlDataSource ID="SqlCoord" runat="server"
ConnectionString="<%$ ConnectionStrings:sistema_gestion_calidadConnectionString %>"
OldValuesParameterFormatString="original_{0}"
SelectCommand="SELECT profesor.nombre + ' ' + profesor.apellidos AS Expr1, materia.nombre_materia, coordinadores.id_coordinador, coordinadores.id_materia, coordinadores.id_profesor FROM coordinadores INNER JOIN materia ON coordinadores.id_materia = materia.id_materia INNER JOIN profesor ON coordinadores.id_profesor = profesor.id_profesor"
UpdateCommand="UPDATE coordinadores SET id_materia = @id_materia, id_profesor = @id_profesor FROM coordinadores INNER JOIN profesor ON coordinadores.id_profesor = profesor.id_profesor INNER JOIN materia ON coordinadores.id_materia = materia.id_materia WHERE (coordinadores.id_coordinador = @original_id_coordinador)">
<UpdateParameters>
<asp:Parameter Name="id_materia" />
<asp:Parameter Name="id_profesor" />
<asp:Parameter Name="original_id_coordinador" />
</UpdateParameters>
</asp:SqlDataSource>
这是我的 DataGridview
<asp:GridView ID="GridView2" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="id_coordinador"
DataSourceID="SqlCoord" CellPadding="4" ForeColor="#333333"
GridLines="None">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:TemplateField HeaderText="Profesor" SortExpression="Profesor">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlProfs"
DataTextField="Expr1" DataValueField="id_profesor">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlProfs" runat="server"
ConnectionString="<%$ ConnectionStrings:sistema_gestion_calidadConnectionString %>"
SelectCommand="SELECT id_profesor, nombre + ' ' + apellidos AS Expr1 FROM profesor">
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Expr1") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="nombre_materia" SortExpression="nombre_materia">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlMats"
DataTextField="nombre_materia" DataValueField="id_materia">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlMats" runat="server"
ConnectionString="<%$ ConnectionStrings:sistema_gestion_calidadConnectionString %>"
SelectCommand="SELECT [id_materia], [nombre_materia] FROM [materia]">
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("nombre_materia") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="id_coordinador" HeaderText="id_coordinador" ReadOnly="True"
SortExpression="id_coordinador" InsertVisible="False" Visible="False" />
<asp:BoundField DataField="id_materia" HeaderText="id_materia"
SortExpression="id_materia" Visible="False" />
<asp:BoundField DataField="id_profesor" HeaderText="id_profesor"
SortExpression="id_profesor" Visible="False" />
</Columns>
<EditRowStyle BackColor="#7C6F57" />
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#E3EAEB" />
<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F8FAFA" />
<SortedAscendingHeaderStyle BackColor="#246B61" />
<SortedDescendingCellStyle BackColor="#D4DFE1" />
<SortedDescendingHeaderStyle BackColor="#15524A" />
</asp:GridView>