未了说明问题,我下面仔细描述了我的问题
说的很多,问题很简单,大家有兴趣的可以耐心看一下问题描述,没耐心的直接看后面的问题好了数据库结构如下:
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="<div onclick="javascript:return confirm('确定删除吗?')">删除</div>"
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) 这个函数写一下
我感觉我的这个函数会有问题。
说的很多,问题很简单,大家有兴趣的可以耐心看一下问题描述,没耐心的直接看后面的问题好了数据库结构如下:
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="<div onclick="javascript:return confirm('确定删除吗?')">删除</div>"
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) 这个函数写一下
我感觉我的这个函数会有问题。
比如在
ItemDataBound事件中e.Item.FindControl("ButtonName");2 这个函数如果有问题把错误报出来
高手再来看看
DateTime m_mydatetime = System.Convert.ToDateTime(E.Item.FindControl(edit_myDateTime).Text);还是提示edit_myDateTime找不到
-----------------》
.FindControl("edit_myDateTime")
DateTime m_mydatetime = System.Convert.ToDateTime(((TextBox)E.Item.Cells[1].Controls[0]).Text);运行的时候,提示无效类型转换,我的隐藏ID是第一列,日期是第二列 Cells[1]对吧?
我不明白Controls[0]).是什么东西?
试试这个
//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;
DateTime m_mydatetime = System.Convert.ToDateTime(((TextBox)E.Item.FindControl("edit_myDateTime")).Text);
还有两个问题:
1、myDateTime='2005-10-23 0:00:00' 我希望它的格式为‘myDateTime='2005-10-23 ’怎么弄啊
2、MoneyType这里是个DROPDOWNLIST,怎么模拟TEXTBOX把它的值或者value啊谢谢大家
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);
运行时提示错误
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);
运行时提示错误
输入字符串的格式不正确。
int id = System.Convert.ToInt32(((TextBox)E.Item.Cells[0].Controls[0]).Text);
E.Item.Cells[0].Text不是数字啊,打出来看看里面是什么?不会有个 吧
跟踪程序就是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(论成败,人生豪迈;大不了,重头再来!^_^)给看看
搞定了
结贴