Обновить текстовое поле через событие onchange в раскрывающемся списке при редактировании в gridview

Asked
Viewd7945

0

Я пытаюсь обновить TextBox в текущей редактируемой строке в GridView при изменении элементов в DropDownList, и я не могу заставить это работать в VB.Я нашел этот код на C #, но не знаю, на правильном ли я пути?

Не могли бы вы предложить помощь?

PS: этот код предназначен для события OnMouseOver, но его цель - обновить TextBox в режиме редактирования.

 <ItemTemplate>
    <asp:TextBox runat="server" ID="tx1" onmouseover='<%# "ChangeValue(" +((DataGridItem)Container).FindControl("tx1").ClientID + ")"%>'></asp:TextBox>
</ItemTemplate>
 

Код JS:

 function ChangeValue(i)
{
    var t=i.id
    document.getElementById(t).value="Hello World!";
}
 
  • "> Matt S12 ноября 2009, 08:04

1 ответов

0

Попробуйте следующее:

Поместите следующий сценарий в тег заголовка:

 <script language="javascript" type="text/javascript">

    function ChangeValue(ddl,txtid)
    {
        var txt=document.getElementById(txtid);
        var dval= ddl.options[ddl.selectedIndex].value;
        if(dval=="1")
        {
         txt.value="It's 1";
        }
        if(dval=="2")
        {
         txt.value="It's 2";
        }
        if(dval=="3")
        {
         txt.value="It's 3";
        }

    }
    </script>
 

Попробуйте вид сетки ниже:

  <asp:GridView ID="GridView1" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"
                AutoGenerateColumns="false" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowCommand="GridView1_RowCommand"
                runat="server" OnRowCreated="GridView1_RowCreated">
                <Columns>
                    <asp:CommandField ButtonType="link" ShowEditButton="true" ShowCancelButton="true" />
                    <asp:TemplateField HeaderText="CategoryID">
                        <ItemTemplate>
                            <asp:LinkButton ID="lnkID" runat="server" CommandName="sel" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.CategoryID") %>'
                                Text='<%# DataBinder.Eval(Container,"DataItem.CategoryID") %>'></asp:LinkButton>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:DropDownList ID="ddl" runat="server">
                                <asp:ListItem Text="1" Value="1" Selected="true"></asp:ListItem>
                                <asp:ListItem Text="2" Value="2"></asp:ListItem>
                                <asp:ListItem Text="3" Value="3"></asp:ListItem>
                            </asp:DropDownList>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Comments">
                        <ItemTemplate>
                            <asp:Label ID="lblID" runat="server" Text='<%# DataBinder.Eval(Container,"DataItem.CategoryID") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="txtComments" runat="server"></asp:TextBox>

                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="CategoryName">
                        <ItemTemplate>
                            <asp:LinkButton ID="lnkName" runat="server" CommandName="sel" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.CategoryName") %>'
                                Text='<%# DataBinder.Eval(Container,"DataItem.CategoryName") %>'></asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
 

Обработка события rowcreated в выделенном коде:

  protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowState == DataControlRowState.Edit)
        {
              DropDownList ddl = (DropDownList)e.Row.FindControl("ddl");
            TextBox txt = (TextBox)e.Row.FindControl("txtComments");
            txt.Text = "It's 1";
            //------------ Set onchange function for dropdown---------------------------//
            ddl.Attributes.Add("onchange", "javascript:ChangeValue(this,'" + txt.ClientID + "');");
        }
    }
 

Свяжите сетку с таблицей категорий в базе данных northwind.

  • Спасибо, Химадри

    Это определенно была линия убийцы… в событии rowcreated

    ddl.Attributes.Add («onchange», «javascript: ChangeValue (this,’ »+ txt.ClientID +« ’);»);

    Matt S12 ноября 2009, 10:32
  • Ничего страшного.Я шел по неправильному пути, я просто дошел до этого этапа.

    Спасибо за ваше время и понимание…

    Matt S12 ноября 2009, 10:30
  • Защищенный вспомогательный DataGrid_InvoiceItems_RowEditing (ByVal отправитель как System.Object, ByVal e как System.Web.UI.WebControls.GridViewEditEventArgs) обрабатывает DataGrid_InvoiceItem.RowEditing

     DataGrid_InvoiceItem.EditIndex = e.NewEditIndex
    
    BindInvoiceItems()
    LoadInvoice()
     
    Matt S12 ноября 2009, 10:31
  • Dim ddlProduct As DropDownList = CType (DataGrid_InvoiceItem.Rows (e.NewEditIndex) .FindControl («ddlProduct»), DropDownList) Dim TextBoxUnitPrice As TextBox = CType (DataGrid_InvoiceItem.Rows (e.NewEditIndex) .FindControl («TextBoxUnitPrice»), TextBox)

     If ddlProduct IsNot Nothing AndAlso TextBoxUnitPrice IsNot Nothing Then
      ddlProduct.Attributes.Add("onchange", "showValue('" + TextBoxUnitPrice.ClientID + "');")
    End If   End Sub
     
    Matt S12 ноября 2009, 10:31