I have a dropdown menu bounded with values from the db on form load. I wanted to use the dropdown as a filter to update a datagrid using an updatepanel, which I managed to get working. I'm binding the datagrid in form load and on selected index changed as shown. I also want to use the same dropdown to update a formview using the DataValueField, which for some reason isn't working. Could the reason be that I'm using two different updatepanels and the same asynchpostbacktrigger? Where should I be binding data to the formview? Your input would be greatly appreciated! Thanks in advance...
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(GetConnectionString());
conn.Open();
SqlCommand cmd3 = new SqlCommand("SELECT c.Email As CompanyEmail, c.Telephone AS Telephone, m.Email AS AdminEmail, m.FirstName + ' ' + m.LastName AS CompanyAdmin FROM Company c, Member m WHERE m.CompanyID = c.CompanyID AND m.CompanyID = '" + company_id + "' AND m.CompanyRole = 'Admin'", conn);
SqlCommand cmd = new SqlCommand("SELECT CompanyName, CompanyID FROM Company ORDER BY CompanyName", conn);
SqlCommand cmd2 = new SqlCommand("SELECT p.ProjectName AS ProjectName, p.ProjectID, p.CompanyID, p.Status AS Status FROM Project p, Company c WHERE p.CompanyID = c.CompanyID AND c.CompanyID = '" + company_id + "' ORDER BY ProjectName", conn);
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
if (!Page.IsPostBack)
{
company_list.DataSource = ds;
company_list.DataTextField = "CompanyName";
company_list.DataValueField = "CompanyID";
company_list.DataBind();
company_list.Items.Insert(0, new System.Web.UI.WebControls.ListItem("-- Please Select Company --"));
}
//cmd2.Connection.Open();
cmd2.CommandType = CommandType.Text;
SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd2);
DataSet ds2 = new DataSet();
sqlAdapter.Fill(ds2);
Gridview1.DataSource = ds2;
Gridview1.DataBind();
FormView1.DataSource = cmd3.ExecuteReader();
FormView1.DataBind();
conn.Close();
//}
//cmd2.Connection.Close();
//cmd2.Connection.Dispose();
}
}
protected void company_list_SelectedIndexChanged(object sender, EventArgs e)
{
company_id = company_list.SelectedValue;
SqlConnection conn = new SqlConnection(GetConnectionString());
conn.Open();
SqlCommand cmd2 = new SqlCommand("SELECT p.ProjectName AS ProjectName, p.ProjectID, p.CompanyID, p.Status AS Status FROM Project p, Company c WHERE p.CompanyID = c.CompanyID AND c.CompanyID = '" + company_id + "' ORDER BY ProjectName", conn);
cmd2.CommandType = CommandType.Text;
SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd2);
DataSet ds2 = new DataSet();
sqlAdapter.Fill(ds2);
Gridview1.DataSource = ds2;
Gridview1.DataBind();
SqlCommand cmd = new SqlCommand("SELECT c.Email As CompanyEmail, c.Telephone AS Telephone, m.Email AS AdminEmail, m.FirstName + ' ' + m.LastName AS CompanyAdmin FROM Company c, Member m WHERE m.CompanyID = c.CompanyID AND m.CompanyID = '" + company_id + "' AND m.CompanyRole = 'Admin'", conn);
cmd.CommandType = CommandType.Text;
FormView1.DataSource = cmd.ExecuteReader();
FormView1.DataBind();
conn.Close();
}
ASP.NET:
<div style="float:left;">
<table>
<tr>
<td class="style1">Select Company:</td>
<td><asp:DropDownList ID="company_list" runat="server"
onselectedindexchanged="company_list_SelectedIndexChanged" width="185" AutoPostBack="true" /></td>
</tr>
<tr>
<td colspan="2" align="right"> </td>
</tr>
</table>
<asp:UpdatePanel ID="UpdateInfo" runat="server">
<ContentTemplate>
<asp:FormView ID="FormView1" runat="server">
<ItemTemplate>
<table>
<tr>
<td>Company Admin:</td>
<td><asp:TextBox Text='<%# Eval("Email") %>' CssClass="input input1" ID="co_admin" width="150" runat="server" ReadOnly="True" /></td>
</tr>
<tr>
<td>Admin Email:</td>
<td><asp:TextBox Text='<%# Eval("AdminEmail") %>' CssClass="input input1" ID="ad_email" width="150" runat="server" ReadOnly="True" /></td>
</tr>
<tr>
<td>Company Email:</td>
<td><asp:TextBox Text='<%# Eval("CompanyEmail") %>' CssClass="input input1" ID开发者_运维百科="co_email" width="150" runat="server" ReadOnly="True" /></td>
</tr>
<tr>
<td>Telephone:</td>
<td><asp:TextBox Text='<%# Eval("Telephone") %>' CssClass="input input1" ID="telephone" width="150" runat="server" ReadOnly="True" /></td>
</tr>
<tr>
<td></td>
<td><asp:Button CssClass="button_style" width="170" ID="export" Text="EXPORT TO EXCEL" runat="server" /></td>
</tr>
</table>
</ItemTemplate>
</asp:FormView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="company_list" />
</Triggers>
</asp:UpdatePanel>
</div>
<center>
<asp:UpdatePanel ID="UpdateGrid" runat="server">
<ContentTemplate>
<asp:gridview ID="Gridview1" runat="server" ShowFooter="True"
AutoGenerateColumns="False" GridLines="None">
<Columns>
<asp:TemplateField HeaderText="Project Name">
<ItemTemplate>
<asp:TextBox Text='<%# Eval("ProjectName") %>' CssClass="input input1" ID="project_name" width="150" runat="server" ReadOnly="True"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Status">
<ItemStyle Width="150" />
<ItemTemplate>
<center><asp:Image ImageUrl='<%# GetStatusImage(Eval("Status").ToString()) %>' ID="status" runat="server"/></center>
</ItemTemplate>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="company_list" />
</Triggers>
</asp:UpdatePanel>
I tried to recreate your scenario with this following code. (And it works)
protected void Page_Load(object sender, EventArgs e)
{
var foos = GetFoos();
Gridview1.DataSource = foos;
Gridview1.DataBind();
DetailsView1.DataSource = foos;
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
DetailsView1.DataBind();
DropDownList1.Items.AddRange(foos.Select(f => new ListItem(f.Name, f.Name)).ToArray());
DropDownList1.Items.Insert(0,new ListItem("-Select-"));
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
var selectedValue = DropDownList1.SelectedValue;
var foos = GetFoos().Where(f => f.Name == selectedValue);
Gridview1.DataSource = foos;
Gridview1.DataBind();
DetailsView1.DataSource = foos;
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
DetailsView1.DataBind();
}
static List<Foo> GetFoos()
{
var list = new List<Foo>();
for(int i=0;i<10;i++)
{
list.Add(new Foo {City = "City" + i, Name = "Name" + i});
}
return list;
}
class Foo
{
public string Name { get; set; }
public string City { get; set; }
}
and here's the markup
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
onselectedindexchanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView runat="server" ID="Gridview1">
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DropDownList1" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px">
</asp:DetailsView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DropDownList1" />
</Triggers>
</asp:UpdatePanel>
</asp:Content>
So, it's something with the formview you have. Can you switch to using DetailsView ?
精彩评论