我在datagrid里放入两个dropdownlist:ddlfOperateStatus和ddlfProblemType,想把数据库里的数据绑定到dropdownlist上,要求操作状态为"操作成功"的话,问题类型的下拉框不要出现,为"操作不成功"的话,问题类型的下拉框出现,且为数据库里的问题类型,为此我用了两列操作状态和问题类型的隐藏列,想在ItemDataBound事件里通过隐藏列绑定.但是结果隐藏列数据正常,dropdownlist里的数据却不对,显示为:
材料人员标 姓名     证件号码          操作状态  操作状态  问题类型  问题类型  备注 
识隐藏列                                        隐藏列               隐藏列
M3      扬文风风 320825197110280953   操作成功 操作成功        
M6       朱阿毛  320922198211013310   操作成功 操作不成功            问题1
好象没绑定上去,第二条记录的操作状态dropdownlist应该显示"操作不成功"的,问题类型的dropdownlist也应该显示的.请问各位大侠是怎么回事?多谢了!急,在线等....(要是我没描述清楚的话,请大家提出来) 
相关代码为:
<asp:datagrid id="DataGrid2" runat="server" CssClass="result" Width="788px" BorderWidth="0px" CellSpacing="1" CellPadding="0" AutoGenerateColumns="False" AllowPaging="True" PageSize="20">
<SelectedItemStyle CssClass="result_select"></SelectedItemStyle>
<AlternatingItemStyle CssClass="result_content_"></AlternatingItemStyle>
<ItemStyle CssClass="result_content"></ItemStyle>
<HeaderStyle CssClass="result_head"></HeaderStyle>
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>
材料人员标识隐藏列
</HeaderTemplate>
<ItemTemplate>
<asp:Label id="lblfId" runat="server" Text='<%# DataBinder.Eval    (Container.DataItem,"fId").ToString() %>' >
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
姓名
</HeaderTemplate>
<ItemTemplate>
<asp:Label id="lblfName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"fName").ToString() %>' >
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
证件号码
</HeaderTemplate>
<ItemTemplate>
<asp:Label id="lblfIDCard" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"fIDCard").ToString() %>' >
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
操作状态
</HeaderTemplate>
<ItemTemplate>
<asp:DropDownList ID="ddlfOperateStatus" Runat="server" OnSelectedIndexChanged="ddlfOperateStatus_SelectedIndexChanged" AutoPostBack=True >
<asp:ListItem Value="OS01">操作成功</asp:ListItem>
<asp:ListItem Value="OS02">操作不成功</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
操作状态隐藏列
</HeaderTemplate>
<ItemTemplate>
<asp:Label id="lblfOperateStatus" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"fOperateStatus").ToString() %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
问题类型
</HeaderTemplate>
<ItemTemplate>
<asp:DropDownList ID="ddlfProblemType" Runat="server" AutoPostBack=True >
<asp:ListItem Value="OPT01">已在该单位参保</asp:ListItem>
<asp:ListItem Value="OPT02">已在其他单位参保</asp:ListItem>
<asp:ListItem Value="OPT03">无此人(退工)</asp:ListItem>
<asp:ListItem Value="OPT04">非参保范围</asp:ListItem>
<asp:ListItem Value="OPT05">其他原因</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
问题类型隐藏列
</HeaderTemplate>
<ItemTemplate>
<asp:Label id="lblfProblemType" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"fProblemType").ToString() %>' >
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
备注
</HeaderTemplate>
<ItemTemplate>
<asp:TextBox id="txtfRe" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"fRe").ToString() %>' >
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle Visible="False" NextPageText="5" PrevPageText="6" HorizontalAlign="Right" ForeColor="Black" Mode="NumericPages"></PagerStyle>
</asp:datagrid>后台相关代码为:
private void DataGrid2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
            if ((e.Item.ItemType == ListItemType.Item)||(e.Item.ItemType == ListItemType.AlternatingItem))  
            {
                string strfOperateStatus = e.Item.Cells[4].Text.ToString(); // 用隐藏列取出数据
              // this.lblMessage.Text = "lalala";
                DropDownList ddlfOperateStatus1 = (DropDownList)e.Item.Cells[3].FindControl("ddlfOperateStatus"); 
                for(int i=0;i<ddlfOperateStatus1.Items.Count;i++)
                {
                    if(strfOperateStatus.Equals(ddlfOperateStatus1.Items[i].Text.ToString()))
                    {
                        ddlfOperateStatus1.Items[i].Selected = true;
                        break;                    }
                } 
                               string strfProblemType = e.Item.Cells[6].Text.ToString(); // 用隐藏列取出数据
                DropDownList ddlfProblemType1 = (DropDownList)e.Item.Cells[5].FindControl("ddlfProblemType"); 
                if(strfProblemType == "")
                    ddlfProblemType1.Visible = false;
                else
                {
                    ddlfProblemType1.Visible = true;
                    for(int i=0;i<ddlfProblemType1.Items.Count;i++)
                    {
                        if(strfProblemType.Equals(ddlfProblemType1.Items[i].Text.ToString()))
                        {
                            ddlfProblemType1.Items[i].Selected = true;
                            break;                        }
                    } 
                }
              
   
            }
           
        }
 public void ddlfOperateStatus_SelectedIndexChanged(object sender, System.EventArgs e)
        {
           
            DropDownList ddlfOperateStatus1 = (DropDownList)sender; 
            TableCell cell = (TableCell)ddlfOperateStatus1.Parent; 
            DataGridItem item = (DataGridItem)cell.Parent;             if(((DropDownList)sender).SelectedItem.Text.ToString() == "操作成功")
                ((DropDownList)item.Cells[5].FindControl("ddlfProblemType")).Visible = false;            if(((DropDownList)sender).SelectedItem.Text.ToString() == "操作不成功")
            {
                ((DropDownList)item.Cells[5].FindControl("ddlfProblemType")).Visible = true;
            }              
        }

解决方案 »

  1.   

    我在datagrid里放入两个dropdownlist模版列:ddlfOperateStatus和ddlfProblemType,在页面第一次调用时,要把数据库里的数据绑定到dropdownlist上,并且如果ddlfOperateStatus为"操作成功"的话,该行ddlfProblemType不要出现,为"操作不成功"的话,该行dlfProblemType出现,因为我数据库里操作状态是"操作成功",该条记录的问题类型的内容为空.操作状态是"操作不成功",该条记录的问题类型的内容是相应的问题.为此我用了两列操作状态和问题类型的隐藏列,想在ItemDataBound事件里通过取出隐藏列的值来绑定两个dropdownlist.但是结果隐藏列数据正确,dropdownlist里的数据却不对,显示为:
    材料人员标 姓名     证件号码          操作状态  操作状态  问题类型  问题类型  备注 
    识隐藏列                                               隐藏列                 隐藏列
    M3      扬文风风 320825197110280953   操作成功 操作成功        
    M6       朱阿毛  320922198211013310   操作成功 操作不成功          问题1
    第二条记录的操作状态dropdownlist应该显示"操作不成功"的,问题类型的dropdownlist也应该显示出来的.请问各位大侠是怎么回事?多谢了!
      

  2.   

    怎么没人帮我啊?其实就是为何ItemDataBound没起作用?我跟踪发现程序直接跳出来了.求助!
      

  3.   

    用模版列。然后在ItemDataBound中判断了。