怎么解决这个问题
因为我在gridview的RowDataBound中添加了行click时,变色事件
protected void gwData_RowDataBound(object sender, GridViewRowEventArgs e)
{
RadioButton rdb = (RadioButton)e.Row.Cells[0].FindControl("RadioButton1");
if (e.Row.RowType == DataControlRowType.DataRow)
{
//選択時、色設定
Button btnHiddenPostButton = e.Row.FindControl("btnHiddenPostButton") as Button;
if (btnHiddenPostButton != null)
{
e.Row.Attributes.Add("onmouseover", "if(this!=prevselitem){this.style.backgroundColor='red'}");
e.Row.Attributes.Add("onmouseout", "if(this!=prevselitem){this.style.backgroundColor='#ffffff'}");
e.Row.Attributes.Add("onclick", "selectColor(this);");
//単選
rdb.Attributes.Add("onclick", "setRadio(this)");
}
}
}
<asp:GridView ID="gwData" runat="server" AutoGenerateColumns="False" Height="224px"
Width="100%" OnRowDataBound="gwData_RowDataBound" BackColor="White" BorderColor="#3366CC"
BorderStyle="None" BorderWidth="1px" CellPadding="4"
GridLines="Horizontal" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<input type="hidden" name="DataId" value="<%#Eval("id") %>" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="101_dg_007">
<ItemTemplate>
<asp:TextBox ID="tName" runat="server" Text='<%# Bind("name") %>' OnTextChanged="tName_TextChanged"
AutoPostBack="true"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="101_dg_008">
<ItemTemplate>
<asp:TextBox ID="tComdata" runat="server" Text='<%# Bind("comdata") %>' OnTextChanged="tComdata_TextChanged"
AutoPostBack="true"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="101_dg_009">
<ItemTemplate>
<asp:RadioButton ID="RadioButton1" runat="server" AutoPostBack="true" OnCheckedChanged="RadioButton1_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="101_dg_009" Visible="false">
<ItemTemplate>
<asp:Label ID="lDefuser" runat="server" Text='<%# Bind("default_use") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="sort" Visible="false">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("sort") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False" HeaderStyle-CssClass="buttonHidden" ItemStyle-CssClass="buttonHidden">
<ItemTemplate>
<asp:Button ID="btnHiddenPostButton" CommandName="HiddenPostButtonCommand" runat="server"
Text="HiddenPostButton" CommandArgument='<%# Container.DataItemIndex %>' Width="0px"
CssClass="buttonHidden" />
</ItemTemplate>
<HeaderStyle CssClass="buttonHidden" />
<ItemStyle CssClass="buttonHidden" />
</asp:TemplateField>
</Columns>
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" HorizontalAlign="Center" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<RowStyle BackColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#0000A9" />
<SortedDescendingHeaderStyle BackColor="#000065" />
</asp:GridView>
现在出现,画面textbox修改值后,需要鼠标点两下才能到其他控件
13 个解决方案
#1
@insus 高手在不
#2
哪位高手在线,帮我看看
#3
postback了。
#4
autopostback 去掉?
#5
AutoPostBack去掉的情况,改变gridview中的textbox值不触发textchange事件,只有点击gridview外按钮是才触发textchange,而且是一次触发4回
#6
高手们快来帮助一下
#7
3楼的意思不是让你去掉AutoPostBack,那个只控制单体回发,现在感觉是你事件重复加载了,也就是postback了,加个
if (!IsPostBack)
{
//你的方法
}
应该就可以了
#8
postback了。
AutoPostBack去掉的情况,改变gridview中的textbox值不触发textchange事件,只有点击gridview外按钮是才触发textchange,而且是一次触发4回
3楼的意思不是让你去掉AutoPostBack,那个只控制单体回发,现在感觉是你事件重复加载了,也就是postback了,加个
if (!IsPostBack)
{
//你的方法
}
应该就可以了
额,但是我是要调后台的textchange方法 怎么能在(!IsPostBack) 这里面写
#9
会不会是因为我给row加了click事件,我加click事件是为了给行加颜色
#10
在给行设置颜色的js中
var prevselitem = null;
var currentIndex = 1;
function selectColor(row) {
currentIndex = row.rowIndex;
if (prevselitem != null) {
prevselitem.style.backgroundColor = '#ffffff';
}
row.style.backgroundColor = 'orange';
prevselitem = row;
document.getElementById('<%=tID.ClientID%>').value = currentIndex - 1;
}
我隐藏的textbox绑的选中的行号,
后台通过隐藏的text进行修改值
protected void tName_TextChanged(object sender, EventArgs e)
{
TextBox tbName = (sender as TextBox);
DataTable dataTable = (DataTable)Session["dtList"];
dataTable.Rows[int.Parse(tID.Text)]["name"] = tbName.Text;
Session["dtList"] = dataTable;
}
var prevselitem = null;
var currentIndex = 1;
function selectColor(row) {
currentIndex = row.rowIndex;
if (prevselitem != null) {
prevselitem.style.backgroundColor = '#ffffff';
}
row.style.backgroundColor = 'orange';
prevselitem = row;
document.getElementById('<%=tID.ClientID%>').value = currentIndex - 1;
}
我隐藏的textbox绑的选中的行号,
后台通过隐藏的text进行修改值
protected void tName_TextChanged(object sender, EventArgs e)
{
TextBox tbName = (sender as TextBox);
DataTable dataTable = (DataTable)Session["dtList"];
dataTable.Rows[int.Parse(tID.Text)]["name"] = tbName.Text;
Session["dtList"] = dataTable;
}
#11
看到了,你的xxx_TextChanged事件,不能写在OnRowDataBound事件中,而是在OnRowCreated。
onRowDataBound事件,是每触发一次,执行一次,而OnRowCreated只会在Gridivew第一次加载时,运行一次。
onRowDataBound事件,是每触发一次,执行一次,而OnRowCreated只会在Gridivew第一次加载时,运行一次。
#12
#13
文本框内容需要验证的话,最好用前台控件验证
而不是每输入一个字母就postback一次
而不是每输入一个字母就postback一次
#1
@insus 高手在不
#2
哪位高手在线,帮我看看
#3
postback了。
#4
postback了。
autopostback 去掉?
#5
postback了。
AutoPostBack去掉的情况,改变gridview中的textbox值不触发textchange事件,只有点击gridview外按钮是才触发textchange,而且是一次触发4回
#6
高手们快来帮助一下
#7
postback了。
AutoPostBack去掉的情况,改变gridview中的textbox值不触发textchange事件,只有点击gridview外按钮是才触发textchange,而且是一次触发4回
3楼的意思不是让你去掉AutoPostBack,那个只控制单体回发,现在感觉是你事件重复加载了,也就是postback了,加个
if (!IsPostBack)
{
//你的方法
}
应该就可以了
#8
postback了。
AutoPostBack去掉的情况,改变gridview中的textbox值不触发textchange事件,只有点击gridview外按钮是才触发textchange,而且是一次触发4回
3楼的意思不是让你去掉AutoPostBack,那个只控制单体回发,现在感觉是你事件重复加载了,也就是postback了,加个
if (!IsPostBack)
{
//你的方法
}
应该就可以了
额,但是我是要调后台的textchange方法 怎么能在(!IsPostBack) 这里面写
#9
会不会是因为我给row加了click事件,我加click事件是为了给行加颜色
#10
在给行设置颜色的js中
var prevselitem = null;
var currentIndex = 1;
function selectColor(row) {
currentIndex = row.rowIndex;
if (prevselitem != null) {
prevselitem.style.backgroundColor = '#ffffff';
}
row.style.backgroundColor = 'orange';
prevselitem = row;
document.getElementById('<%=tID.ClientID%>').value = currentIndex - 1;
}
我隐藏的textbox绑的选中的行号,
后台通过隐藏的text进行修改值
protected void tName_TextChanged(object sender, EventArgs e)
{
TextBox tbName = (sender as TextBox);
DataTable dataTable = (DataTable)Session["dtList"];
dataTable.Rows[int.Parse(tID.Text)]["name"] = tbName.Text;
Session["dtList"] = dataTable;
}
var prevselitem = null;
var currentIndex = 1;
function selectColor(row) {
currentIndex = row.rowIndex;
if (prevselitem != null) {
prevselitem.style.backgroundColor = '#ffffff';
}
row.style.backgroundColor = 'orange';
prevselitem = row;
document.getElementById('<%=tID.ClientID%>').value = currentIndex - 1;
}
我隐藏的textbox绑的选中的行号,
后台通过隐藏的text进行修改值
protected void tName_TextChanged(object sender, EventArgs e)
{
TextBox tbName = (sender as TextBox);
DataTable dataTable = (DataTable)Session["dtList"];
dataTable.Rows[int.Parse(tID.Text)]["name"] = tbName.Text;
Session["dtList"] = dataTable;
}
#11
看到了,你的xxx_TextChanged事件,不能写在OnRowDataBound事件中,而是在OnRowCreated。
onRowDataBound事件,是每触发一次,执行一次,而OnRowCreated只会在Gridivew第一次加载时,运行一次。
onRowDataBound事件,是每触发一次,执行一次,而OnRowCreated只会在Gridivew第一次加载时,运行一次。
#12
#13
文本框内容需要验证的话,最好用前台控件验证
而不是每输入一个字母就postback一次
而不是每输入一个字母就postback一次