在Gridview asp.net中禁用对特定行的编辑

时间:2013-08-22 06:55:26

标签: asp.net sql gridview edit

我有一个Gridview显示我的Customer表。在我的gridview中,用户可以插入新客户并编辑现有客户。

现在回答我的问题。我有两个客户不能让用户编辑,但我希望它们在gridview中显示。我可以以某种方式禁用编辑按钮或该客户的东西吗?例如,通过说where = custID IN(60,61)编辑按钮被禁用?

以下是gridview

的完整代码
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" CellPadding="3" DataKeyNames="CustID" DataSourceID="Event" GridLines="Horizontal" ShowFooter="True" AllowPaging="True" BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px">
    <AlternatingRowStyle BackColor="#F7F7F7" HorizontalAlign="Center" />
    <Columns>
        <asp:CommandField ShowEditButton="True" />
        <asp:TemplateField HeaderText="ID" InsertVisible="False" SortExpression="CustID">
            <EditItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Eval("CustID") %>'></asp:Label>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("CustID") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:LinkButton ValidationGroup="INSERT" OnClick="lbInsert_Click"  ID="lbInsert" runat="server" >Insert</asp:LinkButton>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Anrede" SortExpression="Gender">
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="SqlDataSource1" DataTextField="Gender" DataValueField="Gender" SelectedValue='<%# Bind("Gender") %>'>
                </asp:DropDownList>
                <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:EventConnectionString %>" SelectCommand="SELECT DISTINCT [Gender] FROM [Customer]"></asp:SqlDataSource>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server" Text='<%# Bind("Gender") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label13" runat="server" Text="Anrede"></asp:Label>
                <asp:DropDownList ID="ddlGender" runat="server">
                    <asp:ListItem>Anrede Auswählen</asp:ListItem>
                    <asp:ListItem>Herr</asp:ListItem>
                    <asp:ListItem>Frau</asp:ListItem>
                </asp:DropDownList>
                <asp:RequiredFieldValidator ID="rfvInsGender" runat="server" ErrorMessage="Anrede ist ein Pflichtfeld"
                    ControlToValidate="ddlGender" ValidationGroup="INSERT" Text="*" ForeColor="Red" InitialValue="Anrede Auswählen">
                </asp:RequiredFieldValidator>
                </div>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Name" SortExpression="LastName">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("LastName") %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvEdLastName" runat="server" ErrorMessage="Name ist ein Pflichtfeld"
                    ControlToValidate="TextBox2" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label3" runat="server" Text='<%# Bind("LastName") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label14" runat="server" Text="Name"></asp:Label></div>
                <asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvInsLastName" runat="server" ErrorMessage="Name ist ein Pflichtfeld"
                    ControlToValidate="txtLastName" ValidationGroup="INSERT" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Vorname" SortExpression="FirstName">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("FirstName") %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvEdFirstName" runat="server" ErrorMessage="VorName ist ein Pflichtfeld"
                    ControlToValidate="TextBox3" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label4" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label15" runat="server" Text="Vorname"></asp:Label></div>
                <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvInsFirstName" runat="server" ErrorMessage="VorName ist ein Pflichtfeld"
                    ControlToValidate="txtFirstName" ValidationGroup="INSERT" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Strasse" SortExpression="Street">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("Street") %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvEdStreet" runat="server" ErrorMessage="Strasse ist ein Pflichtfeld"
                    ControlToValidate="TextBox4" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label5" runat="server" Text='<%# Bind("Street") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label16" runat="server" Text="Strasse"></asp:Label></div>
                <asp:TextBox ID="txtStreet" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvInsStreet" runat="server" ErrorMessage="Strasse ist ein Pflichtfeld"
                    ControlToValidate="txtStreet" ValidationGroup="INSERT" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="House Nr" SortExpression="HouseNr">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("HouseNr") %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvEdHouseNr" runat="server" ErrorMessage="House Nr ist ein Pflichtfeld"
                    ControlToValidate="TextBox5" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label6" runat="server" Text='<%# Bind("HouseNr") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label17" runat="server" Text="House Nr"></asp:Label></div>
                <asp:TextBox ID="txtHouseNr" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvInsHouseNr" runat="server" ErrorMessage="House Nr ist ein Pflichtfeld"
                    ControlToValidate="txtHouseNr" ValidationGroup="INSERT" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="PLZ" SortExpression="Zip">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("Zip") %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvEdZip" runat="server" ErrorMessage="PLZ ist ein Pflichtfeld"
                    ControlToValidate="TextBox6" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label7" runat="server" Text='<%# Bind("Zip") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label18" runat="server" Text="PLZ"></asp:Label></div>
                <asp:TextBox ID="txtZip" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvInsZip" runat="server" ErrorMessage="PLZ ist ein Pflichtfeld"
                    ControlToValidate="txtZip" ValidationGroup="INSERT" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Ort" SortExpression="City">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox7" runat="server" Text='<%# Bind("City") %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvEdCity" runat="server" ErrorMessage="Ort ist ein Pflichtfeld"
                    ControlToValidate="TextBox7" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label8" runat="server" Text='<%# Bind("City") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label19" runat="server" Text="Ort"></asp:Label></div>
                <asp:TextBox ID="txtCity" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvInsCity" runat="server" ErrorMessage="Ort ist ein Pflichtfeld"
                    ControlToValidate="txtCity" ValidationGroup="INSERT" Text="*" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Telefon" SortExpression="Phone">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox8" runat="server" Text='<%# Bind("Phone") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label9" runat="server" Text='<%# Bind("Phone") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label20" runat="server" Text="Telefon"></asp:Label></div>
                <asp:TextBox ID="txtPhone" runat="server"></asp:TextBox>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="E-mail" SortExpression="Email">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox9" runat="server" Text='<%# Bind("Email") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label10" runat="server" Text='<%# Bind("Email") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label21" runat="server" Text="E-mail"></asp:Label></div>
                <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Firma" SortExpression="Company">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox10" runat="server" Text='<%# Bind("Company") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label11" runat="server" Text='<%# Bind("Company") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label22" runat="server" Text="Firma"></asp:Label></div>
                <asp:TextBox ID="txtCompany" runat="server"></asp:TextBox>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Status" SortExpression="Active">
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList4" runat="server" DataSourceID="SqlDataSource2" DataTextField="Active" DataValueField="Active" SelectedValue='<%# Bind("Active") %>'>
                </asp:DropDownList>
                <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:EventConnectionString %>" SelectCommand="SELECT DISTINCT [Active] FROM [Customer]"></asp:SqlDataSource>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label12" runat="server" Text='<%# Bind("Active") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <div style="text-align: center;"><asp:Label ID="Label23" runat="server" Text="Status"></asp:Label></div>
                <asp:DropDownList ID="ddlActive" runat="server">
                    <asp:ListItem>Status Auswählen</asp:ListItem>
                    <asp:ListItem>Aktiv</asp:ListItem>
                    <asp:ListItem>Passiv</asp:ListItem>
                </asp:DropDownList>
                <asp:RequiredFieldValidator ID="rfvInsActive" runat="server" ErrorMessage="Status ist ein Pflichtfeld"
                    ControlToValidate="ddlActive" ValidationGroup="INSERT" Text="*" ForeColor="Red" InitialValue="Status Auswählen">
                </asp:RequiredFieldValidator>
            </FooterTemplate>
        </asp:TemplateField>

    </Columns>
    <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
    <HeaderStyle BackColor="#B5C7DE" Font-Bold="True" ForeColor="#4A3C8C" />
    <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
    <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
    <SortedAscendingCellStyle BackColor="#F4F4FD" />
    <SortedAscendingHeaderStyle BackColor="#5A4C9D" />
    <SortedDescendingCellStyle BackColor="#D8D8F0" />
    <SortedDescendingHeaderStyle BackColor="#3E3277" />
</asp:GridView>

1 个答案:

答案 0 :(得分:3)

我建议使用RowDataBound方法遍历记录,然后在CustID字段中查找60和61,然后禁用整个行:

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

          if(dr["CustID"].ToString() == "60" || dr["CustID"].ToString() == "61")
          {
             e.Row.Enabled = false;  //OR dr.Enabled = false;
             //DISABLED Controls only     
             //((TextBox)e.Row.FindControl("TextBox1")).Enabled = false;
          }
      }
}

请记住在GridView标记声明中添加OnRowDataBound="GridView1_RowDataBound"