Javascript 修改SELECT命令返回的datagrid中的文本值

Javascript 修改SELECT命令返回的datagrid中的文本值,javascript,asp.net,datagrid,replace,selectcommand,Javascript,Asp.net,Datagrid,Replace,Selectcommand,我想在从数据库返回数据后修改文本值,我需要修改MBS1270和MBS1263,使其在datagrid中显示时与其他的一样 SelectCommand="SELECT PartNumber as 'Part Number', OnhandStockLevel as 'In Stock', DueIn as 'In Production' FROM vw_Rb_FreeStock WHERE PartNumber = 'UFP-0390B' OR PartNumber = 'UFP-0690B' O

我想在从数据库返回数据后修改文本值,我需要修改MBS1270和MBS1263,使其在datagrid中显示时与其他的一样

SelectCommand="SELECT PartNumber as 'Part Number', OnhandStockLevel as 'In Stock', DueIn as 'In Production' FROM vw_Rb_FreeStock WHERE PartNumber = 'UFP-0390B' OR PartNumber = 'UFP-0690B' OR PartNumber = 'MBS1270' OR PartNumber = 'MBS1263'">
现在,我已经使用javascript替换了body load中的值,但是,这打乱了datagrid的排序,使新替换的值仍然显示在顶部,因为'M'在'U'之前,它仍然基于旧值进行排序

Javascript:

 <script type="text/javascript">
    function modText(original, replace) {
        alert("Hello");
        var find = original;
        var repl = replace;
        var page = document.body.innerHTML;
        while (page.indexOf(find) >= 0) {
            var i = page.indexOf(find);
            var j = find.length;
            page = page.substr(0, i) + repl + page.substr(i + j);
            document.body.innerHTML = page;
        }
</script>

功能模块文本(原件,替换){
警惕(“你好”);
var find=原始;
var repl=替换;
var page=document.body.innerHTML;
while(page.indexOf(find)>=0){
var i=页面索引(查找);
var j=find.length;
page=page.substr(0,i)+repl+page.substr(i+j);
document.body.innerHTML=页面;
}
我想用值“UFP-1690B”和“UFP-1290B”替换MBS值

是否有任何方法可以根据替换的值进行排序?或者是否有其他方法可以采用? 我试着做一些类似于如何使用'as'sql函数替换列标题的事情,但是失败了,类似这样的事情将是完美的

不,我不能更改原始数据库值

Gridview代码:

            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" 
                CellPadding="3" CssClass="style1" DataKeyNames="Part Number" 
                DataSourceID="SqlDataSource1" GridLines="Vertical">
                <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
                <Columns>
                    <asp:BoundField DataField="Part Number" HeaderText="Part Number" 
                        ReadOnly="True" SortExpression="Part Number" />
                    <asp:BoundField DataField="In Stock" DataFormatString="{0:0}" 
                        HeaderText="In Stock" SortExpression="In Stock" />
                    <asp:BoundField DataField="In Production" DataFormatString="{0:0}" 
                        HeaderText="In Production" ReadOnly="True" SortExpression="In Production" />
                </Columns>
                <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
                <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
                <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
                <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
                <AlternatingRowStyle BackColor="#DCDCDC" />
            </asp:GridView>

您可以尝试使用
RowDataBound
事件

void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[1].Text = e.Row.Cells[1].Text.Replace("MBS","UFP");
    }
}
您可以将其添加到网格中

<asp:gridview onrowdatabound="GridView_RowDataBound" />

一个月过去了,但我想我应该为其他有类似问题的人添加一个最终答案

我使用了SQL替换函数,请参见:

之后,我使用UNION将原始数据与替换的数据组合在一起

最终代码:

SELECT REPLACE(REPLACE(PartNumber, 'MBS1269', 'UFP-1290S'), 'MBS1262', 'UFP-1690S') AS PartNumber... (and so on)

输出非常完美。

放置网格的代码,这样我们就可以了解您的意思。@Charlie:MBS1270/'MBS1263'被更改为什么?您也可以发布javascript代码吗?@Daredev用这两部分信息更新了主帖。@Charlie:您能负担得起将结果更新到一个临时表中,然后将其用作您的源吗GridView?可能不是,数据库是只读的。非常棒,这让我不用再使用javascript了,谢谢。但是它仍然没有被排序,这对公司来说是至关重要的:/你有什么建议吗?我查看了GridView.sort事件,但我看到的示例都必须重新查询数据库,这会再次弄乱值。或者如果sorting是不可能的,我能强迫所选的值保持在某个位置/索引吗?谢谢Charlie,我很乐意帮助你,是的,排序是可能的,阅读这篇文章msdn,你有完整的示例:我根本不理解整个表达式参数…sortlist1来自哪里,它存储了什么?