Marcio
Vou tentar ser o mais resumido possivel, em termos de codigo..hehe
O arquivo é composto de vários panels. Colapsei todo mundo e gerei uma imagem dele:
Imagem1.jpg
O código esta dentro do panel PanelAddPortFolio, e a parte, especifica, é:
<asp:TemplateField HeaderText="Categoria" SortExpression="idcategoria">
<EditItemTemplate>
<asp:DropDownList ID="DDEditCat" runat="server" DataSourceID="AccessEditDSCat" SelectedValue='<%# Bind("idcategoria") %>'
DataTextField="categoria" DataValueField="id" OnSelectedIndexChanged="DDEditCat_SelectedIndexChanged"
AutoPostBack="True">
</asp:DropDownList>
<asp:AccessDataSource ID="AccessEditDSCat" runat="server" DataFile="~/App_Data/MDBPRotec.mdb"
SelectCommand="SELECT [id], [categoria] FROM [categorias]"></asp:AccessDataSource>
<asp:RequiredFieldValidator ID="RequiredFieldValidator12" runat="server" ErrorMessage="RequiredFieldValidator" ControlToValidate="DDEditCat">*</asp:RequiredFieldValidator>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="DDAddCat" runat="server" DataSourceID="AccessDSCat" SelectedValue='<%# Bind("idcategoria") %>'
DataTextField="categoria" DataValueField="id" AutoPostBack="True" OnSelectedIndexChanged="DDAddCat_SelectedIndexChanged">
</asp:DropDownList>
<asp:AccessDataSource ID="AccessDSCat" runat="server" DataFile="~/App_Data/MDBPRotec.mdb"
SelectCommand="SELECT [id], [categoria] FROM [categorias]"></asp:AccessDataSource>
<asp:RequiredFieldValidator ID="RequiredFieldValidator13" runat="server" ErrorMessage="RequiredFieldValidator" ControlToValidate="DDAddCat">*</asp:RequiredFieldValidator>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("idcategoria") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="SubCategoria" SortExpression="idsubcategoria">
<EditItemTemplate>
<asp:DropDownList ID="DDEditSCatPort" runat="server" DataTextField="subcategoria" DataValueField="id">
</asp:DropDownList>
<asp:HiddenField ID="HiddenFieldSCat" runat="server" Value='<%# Bind("idsubcategoria") %>' />
<script language="javascript" type="text/javascript">
document.getElementById('LoginViewAdm_DetailsPortfolio_DDEditSCatPort').value = document.getElementById('LoginViewAdm_DetailsPortfolio_HiddenFieldSCat').value
</script>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="DDAddSCat" runat="server">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator15" runat="server" ErrorMessage="RequiredFieldValidator" ControlToValidate="DDAddSCat">*</asp:RequiredFieldValidator>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("idsubcategoria") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
No code behind, o comando que faz essa coisa toda ai funcionar é:
protected void DDEditCat_SelectedIndexChanged(object sender, EventArgs e)
{
DetailsView det = (DetailsView)LoginViewAdm.FindControl("DetailsPortfolio");
DropDownList cat = (DropDownList)det.FindControl("DDEditCat");
DropDownList Scat = (DropDownList)det.FindControl("DDEditSCatPort");
string wsql = "";
if (e != null)
{
wsql = "SELECT [id], [categoria], [subcategoria] FROM [subcategorias] WHERE ([categoria] = " + cat.SelectedValue + ")";
}
else
{
wsql = "SELECT [id], [categoria], [subcategoria] FROM [subcategorias]";
}
OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\MDBPRotec.mdb;Persist Security Info=True");
OleDbCommand comando = new OleDbCommand(wsql, conexao);
OleDbDataAdapter adapter = new OleDbDataAdapter(comando);
DataSet ds = new DataSet();
conexao.Open();
comando.ExecuteNonQuery();
adapter.Fill(ds, "tmp");
Scat.DataSource = ds.Tables[0];
Scat.DataTextField = "subcategoria";
Scat.DataValueField = "id";
Scat.DataBind();
conexao.Close();
}
protected void DDAddCat_SelectedIndexChanged(object sender, EventArgs e)
{
DetailsView det = (DetailsView)LoginViewAdm.FindControl("DetailsPortfolio");
DropDownList cat = (DropDownList)det.FindControl("DDAddCat");
DropDownList Scat = (DropDownList)det.FindControl("DDAddSCat");
string wsql = "";
if (e != null)
{
wsql = "SELECT [id], [categoria], [subcategoria] FROM [subcategorias] WHERE ([categoria] = " + cat.SelectedValue + ")";
}
else
{
wsql = "SELECT [id], [categoria], [subcategoria] FROM [subcategorias]";
}
OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\MDBPRotec.mdb;Persist Security Info=True");
OleDbCommand comando = new OleDbCommand(wsql, conexao);
OleDbDataAdapter adapter = new OleDbDataAdapter(comando);
DataSet ds = new DataSet();
conexao.Open();
comando.ExecuteNonQuery();
adapter.Fill(ds, "tmp");
Scat.DataSource = ds.Tables[0];
Scat.DataTextField = "subcategoria";
Scat.DataValueField = "id";
Scat.DataBind();
conexao.Close();
}
Isso aqui tá rodando em asp 2.0, o bando banco de dados é o access.
A rotina de testes, iniciais, era:
1) Faz o insert, fecha tudo;
2) Edita algo, fecha tudo.
Quando publiquei e fui testar, inseri e alterei na mesma bateria de testes, ai o erro aconteceu. Se alguem quiser acessar e ver o erro "in loco", entra em contato comigo.
Abraços