Обновить GridView с помощью элемента управления Dropdownlist - PullRequest
0 голосов
/ 06 декабря 2011

Я использую VS2005 C #.

В настоящее время у меня есть GridView, и я изменил один из элементов управления GridView на имя моего столбца Gender со значения по умолчанию TextBox на DropDownList, которое я присвоил ID элемента управления GenderList и содержит 2 значения: M и F .

У меня есть оператор обновления по умолчанию, который может обновлять GridView после edit, а именно:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString=
"<%$ ConnectionStrings:SODConnectionString %>" UpdateCommand="UPDATE 
[UserMasterData] SET [Name] = @Name, [Age] = @Age, [ContactNo]=@ContactNo,
 [Address]=@Address, [Gender]=@Gender"/>

Вышеупомянутый запрос ОБНОВЛЕНИЯ работает отлично, и теперь я изменил свое Gender текстовое поле на выпадающий список , запрос UPDATE дал мне ошибку, которая говорит:

Must declare the scalar variable "@Gender".

Я предполагаю, что запрос UPDATE не смог найти значение из моего столбца Gender.

Я пытался изменить запрос UPDATE на @GenderList, но он также не работал.

Кто-нибудь знает, что я должен делать, чтобы выполнить запрос UPDATE, чтобы мой запрос UPDATE мог найти значение из моего выпадающего списка GenderList в моем столбце Gender?

Спасибо.


Ниже приведен мой предыдущий столбец Gender с текстовым элементом управления:

                <asp:BoundField  HeaderText="Gender" 
                DataField="Gender" 
                SortExpression="Gender"></asp:BoundField>

Ниже мой Gender с контролем выпадающего списка:

    <asp:TemplateField HeaderText="Gender" SortExpression="Gender" >
        <EditItemTemplate>
            <asp:DropDownList ID="GenderList" runat="server" Width="50px" >
                <asp:ListItem>M</asp:ListItem>
                <asp:ListItem>F</asp:ListItem>
            </asp:DropDownList>
        </EditItemTemplate>
        <ItemTemplate>

EDIT:

Попробовал реализацию RowDatBound и onRowUpdating:


RowDatBound


protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    DataRowView dRowView = (DataRowView)e.Row.DataItem;
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
            DropDownList genderList= (DropDownList)e.Row.FindControl("GenderList");
            genderList.SelectedValue = dRowView[2].ToString();
        }
    }
}

RowUpdating .aspx.cs


protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{

DropDownList genderSelect =(DropDownList)GridView1.Rows[e.RowIndex].FindControl("GenderList");

SqlDataSource1.UpdateParameters["Gender"].DefaultValue = 
genderSelect.SelectedValue; --> error says not set to an instance of an object

}

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Если вы используете SqlDataSource и обновляете данные через него, все, что вам нужно сделать, это установить двухстороннюю привязку для раскрывающегося списка GenderList.

Вы можете установить это через дизайнер или непосредственно в источнике

 <EditItemTemplate>
                <asp:DropDownList ID="GenderList" runat="server" 
                    SelectedValue='<%# Bind("Gender") %>'>
                    <asp:ListItem>M</asp:ListItem>
                    <asp:ListItem>F</asp:ListItem>
                </asp:DropDownList>
            </EditItemTemplate>

обратите внимание, что здесь используется двухстороннее связывание.

0 голосов
/ 06 декабря 2011

вам нужно использовать выбранное свойство значения, выпадающий список представляет собой набор значений, но вы присваиваете скалярное значение своим операторам обновления.Вы должны проверить, находится ли он в режиме обновления, вам нужно получить значение выбранного элемента в раскрывающемся списке и использовать это значение в качестве параметра для операторов обновления.
Редактирование с помощью раскрывающегося списка в виде сетки

проверить его в режиме редактирования или не использовать как это в RowDataBound Event

if ((e.Row.RowState & DataControlRowState.Edit) > 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...