未了说明问题,我下面仔细描述了我的问题
说的很多,问题很简单,大家有兴趣的可以耐心看一下问题描述,没耐心的直接看后面的问题好了数据库结构如下:
RecordID bigint 8
UserName varchar 30
myDateTime datetime
MoneyType bit 1
MoneyNum decimal 9
myKeyWords varchar 50
Others varchar 200
前台datagird代码如下:
<Columns>
<asp:BoundColumn Visible="False" DataField="RecordID" HeaderText="RecordID"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="日期">
<HeaderStyle Width="15%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<font color="Black">
<%# DataBinder.Eval(Container.DataItem,"myDateTime","{0:yyyy-MM-dd}" )%>
</font>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" onfocus="calendar()" id="edit_myDateTime" Text='<%# DataBinder.Eval(Container.DataItem,"myDateTime","{0:yyyy-MM-dd}" )%>'/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="收入/支出">
<HeaderStyle Width="15%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<font color="Black">
<%# ChangeValue(DataBinder.Eval(Container, "DataItem.MoneyType").ToString()) %>
</font>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="edit_MoneyType" runat="server" SelectedIndex='<%# GetValue(DataBinder.Eval(Container, "DataItem.MoneyType").ToString()) %>'>
<asp:ListItem Value="0">支出</asp:ListItem>
<asp:ListItem Value="1">收入</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="数额">
<HeaderStyle Width="10%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<font color="Black">
<%# DataBinder.Eval(Container.DataItem,"MoneyNum","{0:F}" )%>
</font>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" id="edit_Num" Text='<%# DataBinder.Eval(Container.DataItem,"MoneyNum","{0:F}" )%>'/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="关键字">
<HeaderStyle Width="15%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<font color="Black">
<%# DataBinder.Eval(Container.DataItem,"myKeyWords")%>
</font>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" id="edit_KeyWords" Text='<%# DataBinder.Eval(Container.DataItem,"myKeyWords")%>'/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="备注">
<HeaderStyle Width="30%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<font color="Black">
<%# DataBinder.Eval(Container.DataItem,"Others")%>
</font>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" id="edit_Others" Text='<%# DataBinder.Eval(Container.DataItem,"Others")%>'/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:ButtonColumn Text="&lt;div onclick=&quot;javascript:return confirm('确定删除吗?')&quot;&gt;删除&lt;/div&gt;"
CommandName="Delete">
<ItemStyle Width="5%"></ItemStyle>
</asp:ButtonColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑">
<ItemStyle Width="10%"></ItemStyle>
</asp:EditCommandColumn>
</Columns>后台update代码如下:
public void DGMoneyList_Update(Object sender, DataGridCommandEventArgs E) 
{

//update sql 命令
string id = E.Item.Cells[0].Text;
DateTime m_mydatetime  = System.Convert.ToDateTime(edit_myDateTime.Text);
//DateTime m_mydatetime  = System.Convert.ToDateTime(E.Item.Cells[1].Text); SqlCommand sqlcmd=new SqlCommand ();
sqlcmd.Parameters.Add("@selected",SqlDbType.Bit );
if (edit_MoneyType.SelectedItem.Value =="0") //支出
{
sqlcmd.Parameters["@selected"].Value = 0;
}
else                                   //收入
{
sqlcmd.Parameters["@selected"].Value = 1;
}
decimal m_MoneyNum = System.Convert.ToDecimal(edit_Num.Text);
string m_KeyWords = edit_KeyWords.Text;
string m_strOthers = edit_Others.Text;
string m_UserName = Session["UserName"].ToString(); string strConn = ConfigurationSettings.AppSettings["strConnection"];
SqlConnection myCn = new SqlConnection(strConn);
string cmdstring ="Update MoneyRecord set myDateTime='"+m_mydatetime+"',MoneyType='"+sqlcmd.Parameters["@selected"].Value+"',MoneyNum='"+m_MoneyNum+"',myKeyWords ='"+m_KeyWords+"',Others = '"+m_strOthers+"' where RecordId='"+id+"'" ;

SqlCommand myCmd = new SqlCommand(cmdstring,myCn);
try
{
myCn.Open();
myCmd.ExecuteNonQuery();
}
catch(Exception error)
{
throw error;
}
finally
{
myCmd.Dispose();
myCn.Close();
} //提示用户
LabelTip.Text = "已更新数据";
DGMoneyList.EditItemIndex = -1;
myDataGridDataBind();
}
问题如下:
1、我在<EditItemTemplate>中给各个处于编辑状态下控件设置的ID值为什么在后台代码中不认,编译错误。比如 <asp:DropDownList ID="edit_MoneyType" runat="server" SelectedIndex='<%# GetValue(DataBinder.Eval(Container, "DataItem.MoneyType").ToString()) %>'>
<asp:ListItem Value="0">支出</asp:ListItem>
<asp:ListItem Value="1">收入</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>中的ID="edit_MoneyType" ,我在后台代码 if (edit_MoneyType.SelectedItem.Value =="0") //支出
{
sqlcmd.Parameters["@selected"].Value = 0;
}
else                                   //收入
{
sqlcmd.Parameters["@selected"].Value = 1;
}
中使用edit_MoneyType的时候编译错误,说我没有定义这个变量
2、这个update比较负责,含了一个DROPDOWNLIST还有其它一些控件,那位大侠可以不可以帮我把
public void DGMoneyList_Update(Object sender, DataGridCommandEventArgs E) 这个函数写一下
我感觉我的这个函数会有问题。

解决方案 »

  1.   

    1 Template 里面的控件不是唯一的,因为你新加一个记录他就是多一个控件,所以名称不定如果使用的话要用   FindControl(控件名称)来查找 
    比如在
    ItemDataBound事件中e.Item.FindControl("ButtonName");2 这个函数如果有问题把错误报出来
      

  2.   

    顶下
    高手再来看看
    DateTime m_mydatetime  = System.Convert.ToDateTime(E.Item.FindControl(edit_myDateTime).Text);还是提示edit_myDateTime找不到
      

  3.   

    .FindControl(edit_myDateTime)
    -----------------》
    .FindControl("edit_myDateTime")
      

  4.   

    DateTime m_mydatetime  = System.Convert.ToDateTime(E.Item.FindControl("edit_myDateTime").Text);编译错误:SYSTEM.WEB.UI 并不包含对Text的定义我找到另外一种实现方法
    DateTime m_mydatetime  = System.Convert.ToDateTime(((TextBox)E.Item.Cells[1].Controls[0]).Text);运行的时候,提示无效类型转换,我的隐藏ID是第一列,日期是第二列 Cells[1]对吧?
    我不明白Controls[0]).是什么东西?
      

  5.   

    DateTime m_mydatetime  = System.Convert.ToDateTime(((TextBox)E.Item.FindControl("edit_myDateTime")).Text);
    试试这个
      

  6.   

    DateTime m_mydatetime  = System.Convert.ToDateTime(E.Item.FindControl("edit_myDateTime"));
    //DateTime m_mydatetime  = System.Convert.ToDateTime(((TextBox)E.Item.Cells[1].Controls[0]).Text);
    //string m_mydatetime  = ((TextBox)E.Item.Cells[1].Controls[0]).Text;三种方法运行时都提示:“/holdon”应用程序中的服务器错误。
    --------------------------------------------------------------------------------指定的转换无效。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidCastException: 指定的转换无效。源错误: 
    行 141: //update sql 命令
    行 142: string id = E.Item.Cells[0].Text;
    行 143: DateTime m_mydatetime  = System.Convert.ToDateTime(E.Item.FindControl("edit_myDateTime"));
    行 144: //DateTime m_mydatetime  = System.Convert.ToDateTime(((TextBox)E.Item.Cells[1].Controls[0]).Text);
    行 145: //string m_mydatetime  = ((TextBox)E.Item.Cells[1].Controls[0]).Text;
     
      

  7.   

    楼主好像你没有用我的方法,仔细看看
    DateTime m_mydatetime  = System.Convert.ToDateTime(((TextBox)E.Item.FindControl("edit_myDateTime")).Text);
      

  8.   

    DateTime m_mydatetime  = System.Convert.ToDateTime(((DropDownList)E.Item.FindControl("edit_myDateTime")).SelectedItem.Text);
      

  9.   

    谢谢ghchen()   baobei7758(陵少)我打印出来的字符如下:Update MoneyRecord set myDateTime='2005-10-23 0:00:00',MoneyType='1',MoneyNum='40.00',myKeyWords ='衣',Others = '球鞋+袜子' where RecordId=
    还有两个问题:
    1、myDateTime='2005-10-23 0:00:00' 我希望它的格式为‘myDateTime='2005-10-23 ’怎么弄啊
    2、MoneyType这里是个DROPDOWNLIST,怎么模拟TEXTBOX把它的值或者value啊谢谢大家
      

  10.   

    string id = E.Item.Cells[0].Text;取不到我想要的RecordId  int32型
    Update MoneyRecord set myDateTime='2005-10-23 0:00:00',MoneyType='1',MoneyNum='40.00',myKeyWords ='衣',Others = '球鞋+袜子' where RecordId=int id = System.Convert.ToInt32(E.Item.Cells[0].Text);
    运行时提示错误
      

  11.   


    dropdownlist的问题已搞定:
    if (((DropDownList)E.Item.FindControl("edit_MoneyType")).SelectedItem.Value =="0") //支出
    {
    sqlcmd.Parameters["@selected"].Value = 0;
    }
    else                                   //收入
    {
    sqlcmd.Parameters["@selected"].Value = 1;
    }
    剩下的问题:
    1、日期格式
    2、int id = System.Convert.ToInt32(E.Item.Cells[0].Text);
    运行时提示错误
    输入字符串的格式不正确。
      

  12.   

    日期格式应该只能这样,由于你用的是datetime如果用的是string就可以第二个应该改成-
    int id = System.Convert.ToInt32(((TextBox)E.Item.Cells[0].Controls[0]).Text);
      

  13.   

    E.Item.Cells[0].Text不是数字啊,打出来看看里面是什么?不会有个&nbsp;吧
      

  14.   

    LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^) ( ) 信誉:111  2005-10-24 13:27:00  得分: 0  
     
     
       E.Item.Cells[0].Text不是数字啊,打出来看看里面是什么?不会有个&nbsp;吧
      
     
    跟踪程序就是id="" 呵呵
    日期格式应该只能这样,由于你用的是datetime如果用的是string就可以第二个应该改成-
    int id = System.Convert.ToInt32(((TextBox)E.Item.Cells[0].Controls[0]).Text);
    运行时提示错误
    输入字符串的格式不正确。update SQL语句:
    string cmdstring ="Update MoneyRecord set myDateTime='"+m_mydatetime+"',MoneyType='"+sqlcmd.Parameters["@selected"].Value+"',MoneyNum='"+m_MoneyNum+"',myKeyWords ='"+m_KeyWords+"',Others = '"+m_strOthers+"' where RecordId='"+id+"'" ;id是应该用int还是string?应该是string吧
    那我到底该怎么写那个取id的语句呢就差这一点就搞定了,呵呵
    麻烦ghchen() 和LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)给看看
      

  15.   

    我感觉tings分析的对,试试吧.哦.
      

  16.   

    把datagrid的datakeyfield设置 成数据库 内主键-RecordID,取的时候用string id=datagrid1.datakeys[e.Item.ItemIndex].ToString()更加方便
      

  17.   

    谢谢:LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^) 
    搞定了
    结贴