为什么此DropDownList不在此GridView中更新? [英] Why this DropDownList is not updating inside this GridView?

查看:82
本文介绍了为什么此DropDownList不在此GridView中更新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我具有以下数据库设计:

I have the following database design:

Employee Table: Username, Name, JobTitle, BadgeNo, IsActive, DivisionCode
    Divisions Table: SapCode, DivisionShortcut




我有一个GridView,我正在用它来添加,删除和更新/编辑员工信息.此信息是员工用户名,名称,徽章编号,JobTitle,IsActive和DivisionShortcut.这些分区将在DropDownList中列出.我编写了代码,但出现以下错误:
*

>无效的列名称"DivisionShortcut".

*

ASP.NET代码:




And I have a GridView that I am using it to add, delete and update/edit the employees information. This information is employee Username, Name, BadgeNo, JobTitle, IsActive and the DivisionShortcut. The Divisions will be listed in DropDownList. I wrote the code but I got the following error:
*

> Invalid column name ''DivisionShortcut''.

*

ASP.NET Code:

<asp:GridView ID="GridView1" runat="server" AllowSorting="True"
            AutoGenerateColumns="False" DataKeyNames="Username"
            DataSourceID="SqlDataSource1" BorderWidth="1px" BackColor="#DEBA84"
             CellPadding="3" CellSpacing="2" BorderStyle="None"
             BorderColor="#DEBA84" OnRowEditing="GridView1_RowEditing"
             OnRowCancelingEdit="GridView1_RowCancelingEdit"
             OnRowUpdating="GridView1_RowUpdating">
            <FooterStyle ForeColor="#8C4510"
              BackColor="#F7DFB5"></FooterStyle>
            <PagerStyle ForeColor="#8C4510"
              HorizontalAlign="Center"></PagerStyle>
            <HeaderStyle ForeColor="White" Font-Bold="True"
              BackColor="#A55129"></HeaderStyle>
            <Columns>
                <asp:CommandField ButtonType="Button" ShowEditButton="true" ShowCancelButton="true" />

                <asp:TemplateField HeaderText="Division">
                    <ItemTemplate>
                        <%# Eval("DivisionShortcut")%>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource"
                                            DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList>
                    </EditItemTemplate>
                </asp:TemplateField>

                <asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True"
                    SortExpression="Username" />

                <asp:TemplateField HeaderText="Name">
                    <ItemTemplate>
                        <%# Eval("Name")%>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="txtEmployeeName" runat="server" Text=''<%# Bind("Name")%>'' />
                    </EditItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Job Title">
                    <ItemTemplate>
                        <%# Eval("JobTitle")%>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="txtJobTitle" runat="server" Text=''<%# Bind("JobTitle")%>'' />
                    </EditItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Badge No.">
                    <ItemTemplate>
                        <%# Eval("BadgeNo")%>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="txtBadgeNo" runat="server" Text=''<%# Bind("BadgeNo")%>'' />
                    </EditItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Is Active?">
                    <ItemTemplate>
                        <%# Eval("IsActive")%>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:CheckBox ID="isActive" runat="server"
                                      Checked=''<%# Eval("IsActive").ToString().Equals("True") %>''/>
                    </EditItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Delete?">
                    <ItemTemplate>
                        <span  önclick="return confirm(''Are you sure to Delete the record?'')">
                            <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton>
                        </span>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
            ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>"

            SelectCommand="SELECT     dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive
                            FROM         dbo.Divisions INNER JOIN
                                        dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode"
            UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle,
                                                [BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username"
            DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username">
            <UpdateParameters>
                <asp:Parameter Name="Name" Type="String"  />
                <asp:Parameter Name="JobTitle" Type="String" />
                <asp:Parameter Name="BadgeNo" Type="String" />
                <asp:Parameter Name="DivisionShortcut" Type="String" />
                <asp:Parameter Name="Username" Type="String" />
            </UpdateParameters>
            <DeleteParameters>
                <asp:Parameter Name="Username" Type="String" />
            </DeleteParameters>
        </asp:SqlDataSource>



我忘了提到DropDownList有一个SqlDataSource.



I forgot to mention that there is a SqlDataSource for the DropDownList.

<asp:SqlDataSource ID="DivisionsListDataSource" runat="server"
            ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>"
            SelectCommand="SELECT * FROM Divisions">
        </asp:SqlDataSource>



更新:

后台代码:



UPDATE:

Code-Behind:

//For editing any row in the GridView
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
    {
        GridView1.EditIndex = e.NewEditIndex;
    }

//For updating the information in any row in the GridView
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow gvrow = GridView1.Rows[e.RowIndex];

        DropDownList DivisionsList = (DropDownList)gvrow.FindControl("DivisionsList"); 

        TextBox txtEmployeeName = (TextBox)gvrow.FindControl("txtEmployeeName");
        TextBox txtJobTitle = (TextBox)gvrow.FindControl("txtJobTitle");
        TextBox txtBadgeNo = (TextBox)gvrow.FindControl("txtBadgeNo");

        CheckBox isActive = (CheckBox)gvrow.FindControl("isActive");

        //For getting the ID (primary key) of that row
        string username = GridView1.DataKeys[e.RowIndex].Value.ToString();

        string name = txtEmployeeName.Text;
        string jobTitle = txtJobTitle.Text;
        string badgeNo = txtBadgeNo.Text;
        string division = DivisionsList.SelectedValue.ToString();

        UpdateEmployeeInfo(username, name, jobTitle, badgeNo, division);
    }

private void UpdateEmployeeInfo(string username, string name, string jobTitle, string badgeNo, string division)
    {
        string connString = ConfigurationManager.ConnectionStrings["UsersInfoDBConnectionString"].ConnectionString;
        SqlConnection conn = new SqlConnection(connString);
        string update = @"UPDATE Employee SET Name = @Name, JobTitle = @JobTitle, 
                                                BadgeNo = @BadgeNo, DivisionShortcut = @division
                            WHERE Username = @Username";
        SqlCommand cmd = new SqlCommand(update, conn);

        cmd.Parameters.AddWithValue("@Name", name);
        cmd.Parameters.AddWithValue("@JobTitle", jobTitle);
        cmd.Parameters.AddWithValue("@BadgeNo", badgeNo);
        cmd.Parameters.AddWithValue("@division", division);
        cmd.Parameters.AddWithValue("@Username", username);
        //cmd.Parameters.AddWithValue("@IsActive", isActive.checked);

        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();

            GridView1.EditIndex = -1;
            //            SqlDataSource1.UpdateCommand = @"UPDATE Employee SET Name = @Name, JobTitle = @JobTitle, 
            //                                                BadgeNo = @BadgeNo 
            //                                                WHERE Username = @Username";
            //            SqlDataSource1.Update();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            cmd.Dispose();
            conn.Close();
            conn.Dispose();
        }
        GridView1.DataBind();
    }



错误是:
System.Data.SqlClient.SqlException:无效的列名称"DivisionShortcut".

这是通过UpdateEmployeeInfo()



And the error is:
System.Data.SqlClient.SqlException: Invalid column name ''DivisionShortcut''.

which is fired in the Catch block from the UpdateEmployeeInfo()

推荐答案

ConnectionStrings:UsersInfoDBConnectionString%>在Catch块中触发的" SelectCommand ="SELECT dbo.Divisions.DivisionShortcut,dbo.employee.Username,dbo.employee.Name,dbo.employee.JobTitle,dbo.employee.BadgeNo,dbo.employee.IsActive 来自dbo.Divisions内部联接 dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode UpdateCommand ="UPDATE [员工],[部门] SET [名称] = @名称,[JobTitle] = @JobTitle, [BadgeNo] = @BadgeNo,[DivisionShortcut] = @division WHERE [Username] = @Username DeleteCommand ="DELETE FROM [employee] WHERE [Username] = @Username"> < UpdateParameters> < asp:参数名称=名称"类型=字符串"/> < asp:参数名称="JobTitle" Type ="String"/> < asp:参数名称="BadgeNo"类型="String"/> < asp:参数名称="DivisionShortcut"类型="String"/> < asp:参数名称=用户名"类型=字符串"/> </UpdateParameters> < DeleteParameters> < asp:参数名称=用户名"类型=字符串"/> </DeleteParameters> </asp:SqlDataSource>
ConnectionStrings:UsersInfoDBConnectionString %>" SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive FROM dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode" UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle, [BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username" DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username"> <UpdateParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="JobTitle" Type="String" /> <asp:Parameter Name="BadgeNo" Type="String" /> <asp:Parameter Name="DivisionShortcut" Type="String" /> <asp:Parameter Name="Username" Type="String" /> </UpdateParameters> <DeleteParameters> <asp:Parameter Name="Username" Type="String" /> </DeleteParameters> </asp:SqlDataSource>



我忘了提到DropDownList有一个SqlDataSource.



I forgot to mention that there is a SqlDataSource for the DropDownList.

<asp:SqlDataSource ID="DivisionsListDataSource" runat="server"
            ConnectionString="<%


ConnectionStrings:UsersInfoDBConnectionString%>" SelectCommand = " > </asp:SqlDataSource>
ConnectionStrings:UsersInfoDBConnectionString %>" SelectCommand="SELECT * FROM Divisions"> </asp:SqlDataSource>



更新:

后台代码:



UPDATE:

Code-Behind:

//For editing any row in the GridView
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
    {
        GridView1.EditIndex = e.NewEditIndex;
    }

//For updating the information in any row in the GridView
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow gvrow = GridView1.Rows[e.RowIndex];

        DropDownList DivisionsList = (DropDownList)gvrow.FindControl("DivisionsList"); 

        TextBox txtEmployeeName = (TextBox)gvrow.FindControl("txtEmployeeName");
        TextBox txtJobTitle = (TextBox)gvrow.FindControl("txtJobTitle");
        TextBox txtBadgeNo = (TextBox)gvrow.FindControl("txtBadgeNo");

        CheckBox isActive = (CheckBox)gvrow.FindControl("isActive");

        //For getting the ID (primary key) of that row
        string username = GridView1.DataKeys[e.RowIndex].Value.ToString();

        string name = txtEmployeeName.Text;
        string jobTitle = txtJobTitle.Text;
        string badgeNo = txtBadgeNo.Text;
        string division = DivisionsList.SelectedValue.ToString();

        UpdateEmployeeInfo(username, name, jobTitle, badgeNo, division);
    }

private void UpdateEmployeeInfo(string username, string name, string jobTitle, string badgeNo, string division)
    {
        string connString = ConfigurationManager.ConnectionStrings["UsersInfoDBConnectionString"].ConnectionString;
        SqlConnection conn = new SqlConnection(connString);
        string update = @"UPDATE Employee SET Name = @Name, JobTitle = @JobTitle, 
                                                BadgeNo = @BadgeNo, DivisionShortcut = @division
                            WHERE Username = @Username";
        SqlCommand cmd = new SqlCommand(update, conn);

        cmd.Parameters.AddWithValue("@Name", name);
        cmd.Parameters.AddWithValue("@JobTitle", jobTitle);
        cmd.Parameters.AddWithValue("@BadgeNo", badgeNo);
        cmd.Parameters.AddWithValue("@division", division);
        cmd.Parameters.AddWithValue("@Username", username);
        //cmd.Parameters.AddWithValue("@IsActive", isActive.checked);

        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();

            GridView1.EditIndex = -1;
            //            SqlDataSource1.UpdateCommand = @"UPDATE Employee SET Name = @Name, JobTitle = @JobTitle, 
            //                                                BadgeNo = @BadgeNo 
            //                                                WHERE Username = @Username";
            //            SqlDataSource1.Update();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            cmd.Dispose();
            conn.Close();
            conn.Dispose();
        }
        GridView1.DataBind();
    }



错误是:
System.Data.SqlClient.SqlException:无效的列名称"DivisionShortcut".

这是从UpdateEmployeeInfo()的Catch块中触发的.



And the error is:
System.Data.SqlClient.SqlException: Invalid column name ''DivisionShortcut''.

which is fired in the Catch block from the UpdateEmployeeInfo()


您已经添加了
You have added
<asp:parameter name="DivisionShortcut" type="String" xmlns:asp="#unknown" />


在更新参数中.
将其更改为divison,因为您使用的是@division参数.


in update parameter.
Change it to divison because you are using @division parameter.


这篇关于为什么此DropDownList不在此GridView中更新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆