<asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False" Width="100%" OnEditCommand="Data_Edit"
OnUpdateCommand="Data_Update">
<SelectedItemStyle Font-Size="9pt" Font-Names="宋体" HorizontalAlign="Center"></SelectedItemStyle>
<EditItemStyle Font-Size="9pt" Font-Names="宋体" Font-Bold="True" ForeColor="Red" BackColor="Info"></EditItemStyle>
<AlternatingItemStyle Font-Size="9pt" Font-Names="宋体" ForeColor="ControlText" BackColor="White"></AlternatingItemStyle>
<ItemStyle Font-Size="9pt" Font-Names="宋体" HorizontalAlign="Center" ForeColor="ControlText"
BackColor="WhiteSmoke"></ItemStyle>
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" ForeColor="Black" VerticalAlign="Middle"
BackColor="Control"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="选项">
<ItemTemplate>
<asp:CheckBox id="chkExport" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn Visible="False" DataField="Id" ReadOnly="True" HeaderText="ID"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="日期">
<HeaderStyle Width="9%"></HeaderStyle>
<ItemTemplate>
<%# FormatDateTime(DataBinder.Eval(Container, "DataItem.SubmitTime"),DateFormat.LongDate) %>
</ItemTemplate>
<EditItemTemplate>
<input  class="input" onclick="fPopCalendar(regdate,regdate);return false" type="text" name="regdate" size="6" value ='<%# DataBinder.Eval(Container, "DataItem.SubmitTime").Tostring().Trim() %>'>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="单号">
<ItemTemplate>
<%# DataBinder.Eval(Container, "DataItem.OrderId") %>
</ItemTemplate>########################
    Public Sub Data_Update(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
        Dim datetime As String
        Dim Id As Integer
        datetime = CType(e.Item.Cells(2).Controls(1), HtmlInputText).Value后台我用这样..结果提示出错:
指定的参数已超出有效值的范围。参数名: index 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名: index源错误: 
行 79:         Dim datetime As String
行 80:         Dim Id As Integer
行 81:         datetime = CType(e.Item.Cells(2).Controls(1), HtmlInputText).Value 
哪里错了?救命~~

解决方案 »

  1.   

    要事先判定  e.Item.ItemType == ListItemType.EditItem
    ((HtmlInputText)e.Item.Cells(2).Controls(1)).Value 一般是这么写的俺
      

  2.   

    e.Item.ItemType == ListItemType.EditItem 这句我有加.((HtmlInputText)e.Item.Cells(2).Controls(1)).Value  
    这个不是跟我
    CType(e.Item.Cells(2).Controls(1), HtmlInputText).Value一样吗? 只是c#和vb.net的区别.
      

  3.   

    e.Item.Cells(2).Controls(1)我记的索引是从0开始的,也就是第一列为Cells(0),第一个控件为Controls(0),是不是你是从1开始计算的?另外,FindControl也是比较好的方法.
      

  4.   

    <input  class="input" onclick="fPopCalendar(regdate,regdate);return false" type="text" name="regdate" size="6" value ='<%# DataBinder.Eval(Container, "DataItem.SubmitTime").Tostring().Trim() %>'>
    是这个  input 吗?没  runat=server啊
      

  5.   

    回coldpanth(云之崖) , 我是从0开始计算的...你可以看看我上面datagrid的模列绑~
    回ld_thinking(打击者) ,要啊,,不用 runat=server后台无法控制阿.
      

  6.   

    晕死..看错了ld_thinking(打击者)..是少了runat=server..加上就对了..但是加后,那个js反而出错了...onclick起不了作用.晕死
      

  7.   

    呵呵  你都runat=server了 onclick就是服务器端的事了撒  
    加客户端就  Attribute["onclick"] = "return something";就得了
      

  8.   

    <input runat ="server" id="regdate" class="input" type="text" name="regdate" size="6" value ='<%# DataBinder.Eval(Container, "DataItem.SubmitTime").Tostring().Trim() %>'>现在前input我改这样了..给了个id="regdate",但是我后台输入regdate说我没申明,如果我要加这个onclck事件要怎么加? 谢谢!!!
    onclick = "fPopCalendar(regdate,regdate);return false" 
      

  9.   

    取值
    datetime = CType(e.Item.FindControl("regdate"), HtmlInputText).Value加事件   ItemDataBind()
    {
      加itemType == edititem
    {
      C#写法 vb不熟
      ((HtmlInputText)e.Item.FindControl("regedate")).Attribute["onclick"] = "fPopCalendar(this,this);return false;";}
      

  10.   

    Public Sub Data_Edit(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
            DataGrid1.EditItemIndex = e.Item.ItemIndex
            CreateDataSource()    End Sub
        Public Sub Data_Update(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
            Dim datetime As String
            Dim Id As Integer
            datetime = CType(e.Item.Cells(2).Controls(1), HtmlInputText).Value
            CType(e.Item.FindControl("regdate"), HtmlInputText).Attributes("onclick") = "fPopCalendar(this,this);return false;"
            Id = Convert.ToInt32(e.Item.Cells(1).Text)
            Dim update1 As New modern
            update1.Update(datetime, Id)
            DataGrid1.EditItemIndex = -1
            CreateDataSource()
        End Subld_thinking(打击者) 按照你的做了.没有提示出错,但是点击了.没事件发生~
      

  11.   

    设置onclick属性要在DataGrid1的ItemBound事件中完成。
      

  12.   

    Private Sub datagrid1_ItemDataBound(ByVal sender As System.Object, ByVal e As DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
            DataGrid1.EditItemIndex = e.Item.ItemIndex
            CType(e.Item.FindControl("regdate"), HtmlInputText).Attributes("onclick") = "fPopCalendar(this,this);return false;"    End Sub
    ##################
    未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 行 48:         CType(e.Item.FindControl("regdate"), HtmlInputText).Attributes("onclick") = "fPopCalendar(this,this);return false;"
      

  13.   

    晕晕哦..我前台把onclick改为onmouseover,不用后台Attributes<input runat ="server" id="regdate" class="input" type="text" name="regdate" size="6" onmouseover="fPopCalendar(this,this);return false;" value ='<%# DataBinder.Eval(Container, "DataItem.SubmitTime").Tostring().Trim() %>'>结果居然可以了哦..晕.不知道什么原因......