2013-10-23 33 views
1

当管理员批准/拒绝任何文档一次,然后当管理员再次登录,然后他/她不能再次批准/拒绝文档,dropdownlist将被禁用,只有那些可以一次批准/拒绝再当管理员查看任何新的文件,然后下拉会使得当管理员批准/拒绝该文件,然后它会关闭下拉列表不批准/再在asp.net中dropdownlist禁用

拒绝为了这个,我做这个

protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //Find the DropDownList in the Row 

     DropDownList abc = (e.Row.FindControl("DropDownList9") as DropDownList); 
     abc.Enabled = false; 
    } 
} 

但是这段代码告诉我所有的dropdownlist都是禁用的。

任何解决方案我将如何做到这一点?

+1

你真的应该改写这一职务。这是一个长时间运行的句子。 –

+0

什么是您的数据源 - DataSet,DataTable或IEnumerable?请发布您的数据源。 – Win

+0

我可以显示表中的数据.. – user2883796

回答

1

根据你的评论,我假设你的数据源是DataTable或DataSet。

如果是这样,你要投DataItem的DataRowView的RowDataBound事件要获得状态列的值。

enter image description here

<asp:GridView ID="GridView1" runat="server" 
    AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound"> 
    <Columns> 
     <asp:BoundField DataField="Name" HeaderText="Name" /> 
     <asp:TemplateField HeaderText="Status"> 
      <ItemTemplate> 
       <asp:DropDownList runat="server" ID="DropDownList9"> 
        <asp:ListItem Text="Approve" Value="1" /> 
        <asp:ListItem Text="Reject" Value="2" /> 
        <asp:ListItem Text="Pending" selected="selected" Value="3"> 
       </asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     var table = new DataTable(); 
     table.Columns.Add("Id", typeof (int)); 
     table.Columns.Add("Name", typeof (string)); 
     table.Columns.Add("ApproveID", typeof(string)); 

     table.Rows.Add(1, "Jon Doe", "1"); 
     table.Rows.Add(2, "Eric Newton", "2"); 
     table.Rows.Add(3, "Marry Doe", "3"); 

     GridView1.DataSource = table; 
     GridView1.DataBind(); 
    } 
} 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     var item = e.Row.DataItem as DataRowView; 

     var dropDownList = e.Row.FindControl("DropDownList9") as DropDownList; 

     // Get value from ApproveID column, 
     // and check whehter Approve, Reject or others. 
     switch (item["ApproveID"].ToString()) 
     { 
      case "1": 
      case "2": 
       dropDownList.Enabled = false; 
       break; 
      default: 
       dropDownList.Enabled = true; 
       break; 
     } 
    } 
} 
+0

thanku你的回复,但它显示错误“状态既不是DataColumn也不是DataRelation for table表”。 – user2883796

+0

以上代码仅用于演示目的。 **您将需要根据您的应用程序更换该列。**大多数情况下它可能是** ApproveID **。看到我更新的答案。 – Win

+0

thanku你的回复,这对我真的很有帮助... b – user2883796

0

你可以问哪一行,你是与此代码:

if (e.Row.RowIndex == <aRowNumber>) 
{ 
    ... 
} 
1

你需要从每行访问数据项,我假设它是可用您绑定到网格的对象,并确定它们是否被批准/拒绝。如果是这样,那么你应该运行你的逻辑来禁用:

 protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 

       var yo = (YOUR-OBJECT)e.Row.DataItem; 

       if(yo.Status !== null OR yo.Status != 'Not Reviewed'){ 
       //Find the DropDownList in the Row 
       DropDownList abc = (e.Row.FindControl("DropDownList9") 
       as DropDownList); 
       abc.Enabled = false; 

       } 

      } 

     } 
+0

什么是“(YOUR-OBJECT)”? – user2883796

+0

不管他绑定到这个网格的对象,没有提供 – PJM